2010-04-13 19 views
5

Estoy tratando de usar jQuery.Load para cargar una llamada de anuncio que tiene un document.write, y por alguna razón no puede, o en firefox al menos, vuelve a cargar la página con el anuncio completo.jQuery.load no ejecuta javascript con document.write

Aquí está la versión simplificada del código.

DynamicLoad.html

<html> 
<head> 
<script src="http://www.prweekus.com/js/scripts.js?3729212881" type="text/javascript"></script> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>jQuery Load of Script</title> 
<script type="text/javascript" src="http://www.google.com/jsapi"></script> 
<script type="text/javascript"> 
    google.load("jquery", "1.3.2"); 
</script> 
<script type="text/javascript"> 
    $(document).ready(function(){ 
    $("#myButton").click(function() { 
     $("#myDiv").load("source.html"); 
    }); 
    }); 
</script> 
</head> 
<body> 
<button id="myButton">Click Me</button> 
<div id="myDiv"></div> 

<div id="slideAdUnit"></div> 

</body> 
</html> 

Source.html

<script language="javascript" type="text/javascript"> 
    document.write('<script language="javascript" type="text/javascript"><\/script>'); 
</script> 
test 

vez que haga clic en el botón FF en el navegador simplemente espera a que algo va a cargar. Alguna idea ?

Eventualmente estaría pasando un elemento src en el document.write que apunta a nuestro servidor de anuncios.

Gracias por su ayuda.

Respuesta

5

No puede usar document.write después de que la página haya terminado de cargarse: reemplazará el contenido de la página si lo hace.

La forma más fácil de cargar un script de forma dinámica con jQuery es:

$.getScript(url); 

Otra forma es crear un nuevo elemento <script> y añadirlo al documento.

0

Debe insertar un bloque de script en el DOM. No puedes simplemente escribirlo en el documento de esa manera.

Use: $(document.createElement('script'));, luego configure los atributos que necesita.

var newBlock = $(document.createElement('script')); 
$(newBlock).attr('src','http://...') 
1

writeCapture.js (la revelación completa: Soy el autor) puede resolver esto:

$("#myDiv").writeCapture().load("source.html"); 
0

me encontré con el mismo problema con IE - no ejecuta un guión cargado usando documento .write, pero la creación de un script DOM elemento funcionó perfectamente bien.

En su caso, si usted tiene sólo una secuencia de comandos para cargar en Source.html simplemente modificarlo para crear dinámicamente la escritura DOM elemento. Funcionará tanto en IE y FF. Pero si tiene varios archivos de script para cargar dinámicamente, es posible que no pueda utilizar esta técnica, ya que esta técnica no garantiza el orden de ejecución en IE.

favor, vaya a Google y busque "sitios web aún más rápido" y obtendrá un muy buen artículo sobre la escritura de carga dinámica.

Por cierto, no entiendo por qué IE no ejecuta el script cargado usando document.write.

También mi FF esperaban algo si uso document.write (lo mismo que le pasó !!). No estoy seguro de la razón y podría ser de muy bajo nivel. Por lo tanto, simplemente no lo use con FF. Si ya ha identificado el motivo, por favor comparta.

Cuestiones relacionadas