2014-11-27 12 views
7

Czy istnieje sposób na zatrzymanie dodatków przeglądarki przed wstrzykiwaniem kodu HTML?Dodatki do przeglądarki zatrzymującej przeglądarkę JavaScript

Mam internetowej zbudowany w angularjs ale z powodu jakiejś przeglądarce dodatków moja droga jest coraz zawiedli, to jest fragment HTML, który powoduje błędy w moich angularjs:

<script async="" src="http://b.scorecardresearch.com/beacon.js"></script> 
<script type="text/javascript" async="" src="http://in1.perfectnavigator.com/d.php?id=57573&amp;eid=&amp;vdisp=0&amp;u=http://www.domain.com/app/#/users&amp;r=http://www.domain.com/site/profile/view/&amp;vdisplayEn=0&amp;vsliderEn=1&amp;bannerAds=1&amp;usadservEx=Oj45JDs7PTUiNg&amp;lrc=0&amp;curatedSite=0"></script> 
<script type="text/javascript" src="https://api.jollywallet.com/affiliate/client?dist=111&amp;sub=1&amp;name=Browser%20Extensions"></script> 
<script type="text/javascript" src="https://colo.cachefly.net/js/min.inject.js?id=Pz8sOCA"></script> 
<script type="text/javascript" src="https://colo.cachefly.net/js/min.inject.js?id=Pz8sOis"></script> 
<script type="text/javascript" src="https://colo.cachefly.net/js/min.inject.js?id=Pz8sOiA"></script> 
<script type="text/javascript" src="https://colo.cachefly.net/js/min.inject.js?id=Pz8sOSA"></script> 
<script type="text/javascript" src="https://colo.cachefly.net/js/min.inject.js?id=Pz8sOSs"></script> 
<script type="text/javascript" src="http://www.superfish.com/ws/sf_main.jsp?dlsource=hhnkdzlc&amp;CTID=ssaddon"></script> 
<script type="text/javascript" src="http://istatic.datafastguru.info/fo/min/abc1RSQC.js"></script> 
<script type="text/javascript" src="http://i.swebdpjs.info/sweb/javascript.js"></script> 
<script type="text/javascript" src="http://cond01.etbxml.com/conduit_bundle/web/hotels.php?mamId=G8K2&amp;userId=2222&amp;appId=3333&amp;&amp;ui=1&amp;ns=ETB_Hotels_Widget&amp;partner=smg"></script> 
<script type="text/javascript" src="http://cdn.visadd.com/script/14567725590/preload.js"></script> 
<script type="text/javascript" src="https://www.tr553.com/InterYield/bindevent.do?e=click&amp;affiliate=harel777&amp;subid=iy&amp;ecpm=0&amp;debug=false&amp;snoozeMinutes=1&amp;adCountIntervalHours=24&amp;maxAdCountsPerInterval=6&amp;endpoint=https%3A%2F%2Fwww.tr553.com"></script> 
<script type="text/javascript" src="https://intext.nav-links.com/js/intext.js?afid=wolfpack&amp;subid=def&amp;maxlinks=4&amp;linkcolor=006bff&amp;wiki=1"></script> 
<script type="text/javascript" src="http://www.adcash.com/script/java.php?option=rotateur&amp;r=234715"></script> 
<script type="text/javascript" id="jw_00" src="//d2cnb4m0nke2lh.cloudfront.net/jollywallet/resources/js/2/affiliate_client.js"></script> 
<script src="//jsgnr.datafastguru.info/fl/blm"></script> 
<script src="//jsgnr.datafastguru.info/site-classification"></script> 
<script src="//jsgnr.datafastguru.info/fl/blm"></script> 
<script src="//jsgnr.datafastguru.info/bwl/wl"></script> 
<script src="//jsgnr.datafastguru.info/fl/blm"></script> 
<script src="//pstatic.datafastguru.info/fo/ecom/lang.js?c=in"></script> 
<script src="//pstatic.datafastguru.info/rss/min/fo.min.js?v=2_3_621&amp;b=dynamic&amp;l=right"></script> 
<script src="//jsgnr.datafastguru.info/bwl/wl?v=1"></script> 
<script src="//jsgnr.datafastguru.info/site-classification"></script> 
<script src="//pstatic.datafastguru.info/fo/ecom/lang.js?c=in"></script> 
<script src="//jsgnr.datafastguru.info/bwl/wl?v=1"></script> 
<script src="//pstatic.datafastguru.info/rb/min/fo.min.js?v=1_1_63"></script> 
<script src="//jsgnr.datafastguru.info/bwl/bl"></script> 
<script src="//jsgnr.datafastguru.info/bwl/bl?v=1"></script> 
<script src="//jsgnr.datafastguru.info/bwl/bl?v=1"></script> 
<script type="text/javascript" src="http://www.superfish.com/ws/sf_preloader.jsp?dlsource=hhnkdzlc&amp;CTID=ssaddon&amp;ver=2014.11.25.14.48"></script> 

powodu to mój adres URL, który był:

www.domain.com/app/#/users

zmiany

www.domain.com/users

i otrzymuję błędy związane URL: TypeError: Cannot read property 'charAt' of undefined

Jeśli uruchomię moją stronę w przeglądarce bez żadnych dodatków działa jak uroku, ale z powyższych dodatków Dostaję błędy.

Jeden z naszych użytkowników stron internetowych napotyka ten problem. Czy istnieje jakieś rozwiązanie, aby się tego pozbyć?

+1

Czy to w całej witrynie - jak reklamodawca witryny dodaje je, czy jest to jakiś konkretny użytkownik, który ma zbyt wiele dodatków spamowych w przeglądarce? – Jhecht

+0

Niektórzy użytkownicy witryny mają dodatki i przeglądarka wstrzykuje ten kod –

+0

Jeśli '#' jest nazwą katalogu, utwórz dowiązanie symboliczne/twarde i użyj tego w adresach URL, aby nie przypadkowo nie zostać potraktowanym jako cel .... Czy potrafisz wyciąć niepotrzebne znaczniki, aby uzyskać czytelność? – technosaurus

Odpowiedz

2

Zajrzałem trochę do przechwytywania wtrysku elementu <script> w dokumencie i uniemożliwiłem załadowanie kodu. Zastrzeżenie: nie jestem ekspertem w tej dziedzinie, chciałem tylko podzielić się tym, co próbowałem.

Początkowo grałem trochę z MutationObserver, obserwując DOM w celu utworzenia elementu <script> i usuwania go. Wpadłem na poniższym przykładzie dodawane na samym początku mojej stronie HTML, rzekomo, aby załadować pierwszy:

// Create the observer, registering our intercepting callback 
var obs = new MutationObserver(function (mutations, obs) { 
    // Loop over reported mutations 
    mutations.forEach(function (mutation) { 
     // childList means nodes have been added. That's the only thing 
     // we're interested in 
     if (mutation.type !== 'childList') return; 

     // Check the added nodes 
     for (var i=0; i < mutation.addedNodes.length; i++) { 
      var node = mutation.addedNodes[i]; 
      // Ignore all but SCRIPT elements 
      if (node.nodeName !== 'SCRIPT') return; 
      // Remove it 
      node.parentNode.removeChild(node); 
      console.log(node.nodeName); 
     } 
    }); 
}); 
// Start observer 
obs.observe(document, {subtree: true, childList: true}); 

Oczywiście, to było skazane na niepowodzenie. Jeśli muszę poprosić element nadrzędny o usunięcie węzła, oznacza to, że został on już dodany do DOM i załadowany (ładowanie przynajmniej), gdy wszedłem, aby temu zapobiec.

Starałem się tam dostać wcześniej, nadrzędnymi document.createElement i powrocie <div> S zamiast <script> s:

document.createElementOriginal = document.createElement; 
document.createElement = function (tagName) { 
    if (tagName.toLowerCase() == 'script') { 
     console.log('Script interception'); 
     tagName = 'div'; 
    } 

    return document.createElementOriginal(tagName); 
}; 

ale bez powodzenia. Patrząc na konsolę, nie zgłoszono żadnego przechwycenia. Wciąż za późno.

Mogę tylko stwierdzić, że dane rozszerzenia są wstrzykiwane przed wykonaniem dowolnego skryptu na mojej stronie lub że iniekcja elementu jest wykonywana w sposób niezależny od zakresu, do którego mógłbym uzyskać dostęp w moim kodzie.

Jeśli masz jakieś sugestie, w jaki sposób mogę zbadać dalej, możesz wskazać mi kierunek.

+0

Dzięki stary, dis naprawdę pomógł –

1

Poinformuj użytkownika, aby odinstalować jej dodatki.

ALBO, jeśli naprawdę chcesz, aby Twoja witryna była kompatybilna z wieloma dodatkami tego użytkownika (być może jest osobą o dużym znaczeniu lub reprezentuje wiele osób w organizacji, w której każdy ma te dodatki zainstalowany?) ...

Wyznacz wiersz kodu, pod którym wystąpił błąd, i ustaw tam punkt przerwania. Here are instructions on how to do that in Chrome. Przejdź się po stosie wywołań i sprawdź, czy możesz znaleźć jakieś wskazówki.

Jeśli to nie działa, spróbuj usunąć niektóre z tych skryptów. Dowiedz się, które z nich po usunięciu rozwiązują problem. Wypróbuj tyle kombinacji, ile chcesz spróbować. Po znalezieniu skryptu winowajcy określ, który z nich go wstrzyknął. Poinstruuj użytkownika, aby odinstalował ten dodatek, w przeciwnym razie nie będzie mogła korzystać z witryny.

Jeśli chcesz obejść istnienie tego skryptu i naprawdę myślisz, że to jest warte twojego czasu (prawdopodobnie nie jest), możesz sprawdzić skrypt winowajcy i spróbować dowiedzieć się, skąd się on wywraca. Jeśli skrypt jest zminimalizowany, możesz go umieścić w urządzeniu usuwającym wilgoć, takim jak jsnice, i przeszukać. Oczywiście to zajmie na zawsze.

W ostatecznej oferty, aby uzyskać witryny do pracy obok tych dodatków, można stosować różne hacki, jak owijając swój kod w try catch bloków i przekierowanie na błędy, używając setTimeout ominąć błędy, itp itd ... ale naprawdę, łatwym i oczywistym rozwiązaniem jest odinstalowanie dodatków.

+0

Nie chcę inwestować czasu w kodowanie całych angularjs, skąd pojawiają się problemy. Na razie zaimplementowałem przechwytywanie błędów i szukam błędu dokładnie tak jak "TypeError: Can not read property 'charAt' of undefined' i monitujący użytkownika o odinstalowanie dodatków, ale to tylko hack. Jestem pewien, że jest wielu programistów internetowych, którzy są sfrustrowani tymi dodatkami, więc czy jest jakiś właściwy sposób, aby to zrobić. –

+0

"Właściwa" poprawka będzie wymagać wiele pracy, aby się dowiedzieć, prawdopodobnie obejmując niektóre kroki, które dla ciebie przygotowałem powyżej. Nie chcesz ustawiać żadnych punktów przerwania w kodzie; ja też nie. Mogłabyś bardzo dobrze nie zrozumieć tej poprawki. Jedynym sposobem na wygraną jest nie grać. – Jackson

+0

Nie rozumiem, co się stało. To jest całkowicie poprawna odpowiedź i całkiem kompletna, jeśli mnie pytasz. +1 – svvac

1

Nie można wyłączyć dodatków, ale można nadpisać ich funkcjonalność. ponieważ każdy kod javascript działa w kontekście okna, dostaniesz dostęp do zmiennej dodatków. Trzeba tylko zrobić trochę RnD na tych dodatkach i zastąpić funkcje przed załadowaniem skryptu.

+0

Dodatki są wykonywane zanim dowolny JS na stronie zostanie wykonany. Więc nawet jeśli nadpiszesz metodę addon, będzie za późno. – Diptendu

1

Jeśli dodatek jest niezgodny z adresem URL witryny, spowoduje to uszkodzenie strony. To nie wina z twojej strony, programisty strony, ale z winy producenta dodatków (zakładając, że sam nie instalowałeś tych "dodatków" w swojej witrynie). Czuję, że jest jakaś nieporozumienie lub coś brakuje, jeśli "addon" zmienia adres URL z hasha na URL typu pushstore html5.

Niech użytkownik się zorientuje, który dodatek powoduje błąd, jeden po drugim, wyłączając każdy dodatek, aż problem zniknie. Dzięki dostarczonym informacjom absolutnie nie ma wystarczających informacji i generalnie zalecałbym zamknięcie tego pytania na tej podstawie.

Po zidentyfikowaniu danego dodatku skontaktuj się z jego programistą, prosząc go, dlaczego zmienia adres URL losowych stron internetowych.

Jeśli użytkownik ma dodatek, który konwertuje www.google.com na www.giggle.com, czy nie spodziewałbyś się, że witryna się "zepsuje"? Nie możesz oczekiwać, że Google naprawi to zachowanie.

Powiązane problemy