2014-11-27 9 views
7

C'è un modo per impedire ai componenti aggiuntivi del browser di iniettare codice HTML?Javascript stop browser add examples

Sto avendo un sito web costruito in angularjs ma a causa di alcuni componenti aggiuntivi del browser il mio percorso è sempre incasinato, questo è il frammento di codice HTML che sta causando alcuni errori nei miei 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> 

A causa di questo mio URL che era:

www.domain.com/app/#/users

modifiche

www.domain.com/users

E sto ottenendo errori correlati URL: TypeError: Cannot read property 'charAt' of undefined

Se eseguo il mio sito web su un browser senza alcun add-on funziona come un fascino, ma con i suddetti componenti aggiuntivi sto ottenendo gli errori.

Uno degli utenti dei nostri siti Web è di fronte a questo problema. C'è qualche soluzione per sbarazzarsi di questo?

+1

È presente in tutto il tuo sito Web, ad esempio un inserzionista per il tuo sito Web, viene aggiunto, oppure è solo un particolare utente che ha troppi addons spam nel proprio browser? – Jhecht

+0

Quindi alcuni utenti del sito web stanno avendo aggiunte e il browser sta iniettando questi codici –

+0

Se '#' è un nome di directory, crea un collegamento simbolico/hardlink e usalo negli urls, in modo che non venga trattato accidentalmente come target .... Puoi ritagliare i tag non necessari per la leggibilità? – technosaurus

risposta

2

Ho cercato un po 'di intercettare l'iniezione di elemento <script> nel documento e di impedire il caricamento del codice. Disclaimer: non sono un esperto in materia, volevo solo condividere ciò che ho provato.

In un primo momento, ho giocato un po 'con MutationObserver, guardando il DOM per la creazione di un elemento <script> e rimuovendolo. Sono venuto con il seguente frammento, aggiunto proprio all'inizio della mia pagina HTML, presumibilmente per renderlo caricare prima:

// 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}); 

Ovviamente, questo era destinato a fallire. Se devo chiedere a un elemento genitore di rimuovere il nodo, significa che è già stato aggiunto al DOM e caricato (almeno in caricamento) quando sono entrato per impedirlo.

Ho cercato di arrivare prima, sovrascrivendo document.createElement e tornando <div> s invece di <script> s:

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

    return document.createElementOriginal(tagName); 
}; 

ma senza fortuna. Guardando la console, non è stata segnalata alcuna intercettazione. Ancora troppo tardi.

Posso solo concludere che i dati di estensione vengono iniettati prima che venga eseguito qualsiasi script sulla mia pagina o che l'elemento di iniezione sia realizzato in un modo indipendente dall'ambito a cui ho potuto accedere nel mio codice.

Se avete qualche suggerimento su come posso approfondire ulteriormente, sentitevi liberi di indicarmi in quella direzione.

+0

Grazie amico, mi ha davvero aiutato –

1

Dite all'utente di disinstallare i suoi componenti aggiuntivi.

OPPURE, se sei veramente intenzionato a rendere il tuo sito web compatibile con la gamma di componenti aggiuntivi di questo utente (forse è una persona di grande importanza o rappresenta molte persone in un'organizzazione in cui tutti hanno questi componenti aggiuntivi installato?) ...

Designare la riga di codice in cui viene generato l'errore e impostarvi un punto di interruzione. Here are instructions on how to do that in Chrome. Salta la pila delle chiamate e vedi se riesci a trovare qualche indizio.

Se ciò non funziona, provare a rimuovere alcuni di questi script. Scopri quali, una volta rimossi, risolvono il problema. Prova tutte le combinazioni che vuoi provare. Una volta trovato lo script colpevole, determinare quale componente aggiuntivo lo ha iniettato. Chiedere all'utente di disinstallare questo componente aggiuntivo, altrimenti non sarà in grado di utilizzare il sito Web.

Se si vuole aggirare l'esistenza di questo script e si pensa davvero che valga la pena dedicare del tempo (probabilmente non lo è), è possibile esaminare la sceneggiatura colpevole e cercare di scoprire dove si sta rovinando. Se lo script è minimizzato, puoi farlo cadere in un deobfuscator come jsnice e setacciarlo. Certo, ci vorrà per sempre.

Nel tentativo finale per ottenere il vostro sito per lavorare al fianco di questi add-on, si potrebbe impiegare diversi hack, come avvolgere il codice in try catch blocchi e riorientare sugli errori, utilizzando setTimeout di aggirare gli errori, ecc ecc ... ma in realtà, la soluzione facile e ovvia è disinstallare i componenti aggiuntivi.

+0

Non voglio investire tempo nella codifica di interi angularjs da cui i problemi si innescano. Per ora ho implementato l'intercettatore di errori e ho cercato l'errore esattamente come 'TypeError: Impossibile leggere la proprietà 'charAt' di undefined' e chiedere all'utente di disinstallare i componenti aggiuntivi, ma questo è solo l'hack. Sono sicuro che ci sono molti sviluppatori web che sono frustrati con questi add-on, quindi c'è un modo corretto per farlo. –

+0

La correzione "corretta" richiederà molto lavoro per capire, probabilmente coinvolgendo alcuni dei passaggi che ho esposto per voi sopra. Non si desidera impostare alcun punto di interruzione nel codice; neanche io. Potresti non capire mai la soluzione. L'unico modo per vincere è non giocare. – Jackson

+0

Non capisco il downvote. Questa è una risposta perfettamente valida e abbastanza completa se me lo chiedi. +1 – svvac

1

Non è possibile disattivare gli addon ma è possibile sovrascrivere la loro funzionalità. dato che ogni codice javascript gira sotto il contesto della finestra, avrai accesso alla variabile addons. Hai solo bisogno di fare un po 'di RnD su quei componenti aggiuntivi e sostituire le funzioni prima del caricamento dello script.

+0

I componenti aggiuntivi vengono eseguiti prima dell'esecuzione di qualsiasi JS sulla pagina. Quindi, anche se si sovrascrive il metodo addon, sarà troppo tardi. – Diptendu

1

Se un addon crea problemi con l'URL di un sito Web, interromperà il sito web. Non è colpa tua, lo sviluppatore del sito, ma è colpa dello sviluppatore di addon (supponendo che tu non abbia installato questi "componenti aggiuntivi" nel tuo sito web). Mi sembra che ci sia una sorta di incomunicabilità o qualcosa che manca se "addon" sta cambiando il tuo url da un hash a un URL pushstate html5mode.

Avere l'utente capire quale addon causa il bug uno a uno, disabilitando ogni addon fino a quando il problema non scompare. Con le informazioni che hai fornito non ci sono assolutamente informazioni sufficienti per andare avanti e in generale vorrei sostenere la chiusura di questa domanda su questa base.

Una volta identificato l'addon in questione, contattare il proprio sviluppatore chiedendo loro perché stanno modificando l'URL dei siti Web casuali.

Se l'utente ha un addon che converte www.google.com in www.giggle.com, non ti aspetti che il sito web "si interrompa"? Non puoi aspettarti che Google aggiusti questo comportamento.