2010-04-13 21 views
5

Sto cercando di utilizzare jQuery.Load per caricare una chiamata annuncio che ha un documento.write, e per qualche motivo non è in grado, o in firefox atleast, ricaricare la pagina con l'intero annuncio.jQuery.load non esegue javascript con document.write

Ecco la versione semplificata del codice.

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 

Una volta che si fa clic sul pulsante in FF il browser appena aspetta qualcosa da caricare. Qualche idea ?

Eventualmente passerei un elemento src nel documento.write che punta al nostro ad server.

Grazie per il vostro aiuto.

risposta

5

Non è possibile utilizzare document.write al termine del caricamento della pagina: sostituirà il contenuto della pagina se lo si fa.

Il modo più semplice per caricare dinamicamente uno script con jQuery è:

$.getScript(url); 

Un altro modo è quello di creare un nuovo elemento <script> e aggiungerlo al documento.

0

È necessario inserire un blocco di script nel DOM. Non puoi semplicemente scriverlo nel documento in questo modo.

Uso: $(document.createElement('script'));, quindi impostare gli attributi desiderati.

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

writeCapture.js (Full Disclosure: Sono l'autore) può risolvere questo:

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

ho trovato lo stesso problema con IE - non esegue uno script caricati utilizzando documento .write, ma la creazione di uno script elemento DOM ha funzionato perfettamente.

Nel tuo caso, se si dispone di un solo script per caricare in Source.html solo modificarlo per creare dinamicamente lo script DOM elemento. Funzionerà sia in IE e FF. Tuttavia, se si caricano dinamicamente più file di script, potrebbe non essere possibile utilizzare questa tecnica poiché questa tecnica non garantisce l'ordine di esecuzione in IE.

vai al Google e cercare "i siti web ancora più veloce" e si otterrà un bel articolo su sceneggiatura caricamento dinamico.

A proposito, non capisco perché IE non esegua lo script caricato utilizzando document.write.

Anche il mio FF aspettava qualcosa se io uso document.write (stessa cosa è successa a te !!). Non sono sicuro del motivo e potrebbe essere di livello molto basso. Quindi, per favore basta non usarlo con FF. Se hai già identificato il motivo, per favore condividi.

Problemi correlati