2010-06-21 36 views
14

Quiero eliminar este bloque de Google Analytics, usando jQuery.Eliminar <script> etiquetas usando jQuery

<script type="text/javascript"> 
    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www."); 
    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E")); 
</script> 
<script type="text/javascript"> 
    try { 
     //var pageTracker = _gat._getTracker("xxx"); 
     pageTracker._trackPageview(); 
    } catch(err) {} 
</script> 

LA RAZÓN

Debido a que estoy creando una medida convertidor lector de pantalla para jQuery basado en una especificación del cliente. Es el Google Analytics el que me está molestando.

EL PROBLEMA

Funciona con .remove() hasta que se desplaza fuera, a continuación, pulse la espalda. Google Analytics se cuelga.

+5

Puede eliminar los elementos, pero no creo que esto haga lo que quiera ... el script ya se habrá ejecutado en ese punto. –

+0

¿Está tratando de validar los datos del formulario? Si es así, esto no detendrá a un atacante. La validación del lado del servidor es necesaria. – ceejayoz

+0

No, estoy creando algunas funciones de lector de pantalla a medida basadas en Javascript. –

Respuesta

7

Prueba esto:

var replacementDoneIn = $(document.body).text(); //remove Google Analytics document.write line 
     var regExMatch = /document\.write\(unescape/g; 
     var replaceWith = "//document.write"; 
     var resultSet = replacementDoneIn.replace(regExMatch, replaceWith); 
     $("body").html(resultSet); 

Espero que ayude!

+3

Perfecto, pero esto elimina TODAS las instancias de 'document.write (unescape' pero está bien para lo que necesito por el momento. –

+3

Tenga en cuenta que esto también eliminará todos los eventos de la página. – David

+7

jaja, ¿cómo comentó Davids 3 votaciones ascendentes cuando dije las mías unas 8 horas antes? - usuarios aleatorios de stackoverflow:) –

0

Para eliminar realmente los elementos, jQuery('script:not([src^=http])').remove() funcionará.

+1

No, me temo que esto tampoco funciona>. < –

+0

Es decir, desde la "vista fuente "? Si es así, no hay solución en JS. Sin embargo, elimina cualquier bloque de scripts sin' src' de la dom. Si quieres eliminar todo, simplemente usa 'jQuery ('script'). remove()' –

+0

Esto elimina todas las etiquetas de script, solo quiero eliminar una específica ... –

2

También puede conectar document.write y comprobar si su código anlytics Google antes de parar esta manera:

<script> 
// Must run before google analytics though 
old_document_write = document.write; 
document.write = function(str) 
{ 
    if(/* determine if the str is google analyic code */) 
     return false; // dont write it 
    else 
     old_document_write(str); 
} 
</script> 
1

Por lo tanto este trabajo como usted espera. Al menos creo que lo hará:

<script type="text/javascript"> 
    $(document).ready(function() { 
     $("script").each(function() { 
      if (this.innerHTML.length > 0) { 
       var googleScriptRegExp = new RegExp("var gaJsHost|var pageTracker"); 
       if (this.innerHTML.match(googleScriptRegExp) && this.innerHTML.indexOf("innerHTML") == -1) 
        $(this).remove(); 
      } 
     }); 
    }); 
</script> 

Solo para explicar. Repaso todas las etiquetas de script en la página. Si su propiedad innerHTML tiene una longitud superior a 0, entonces verifico el HTML interno de la secuencia de comandos y si encuentro la cadena var gaJsHost o var pageTracker en ella. Luego me aseguro de que tampoco veo innerHTML en él, ya que nuestro script obviamente tendrá estos en él. A menos que, por supuesto, usted tiene este código en un guión cargado en la página utilizando src en cuyo caso este script no tendría un conjunto de propiedades innerHTML y se puede cambiar el caso de la línea a ser sólo

if (this.innerHTML.match(googleScriptRegExp)) 

Hope esto es lo que estaban buscando.

Cuestiones relacionadas