2010-04-13 23 views
5

Próbuję użyć jQuery.Load do załadowania wywołania reklamy, które ma document.write, i z jakiegoś powodu nie jest w stanie, lub w firefox co najmniej, ładuje się ponownie strona z całą reklamą.jQuery.load nie wykonuje javascript z document.write

Oto uproszczona wersja kodu.

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 

Po kliknięciu przycisku w FF przeglądarka po prostu czeka na coś do załadowania. Jakieś pomysły ?

Ostatecznie chciałbym przekazać element src w document.write, który wskazuje na nasz serwer reklam.

Dzięki za pomoc.

Odpowiedz

5

Po zakończeniu ładowania strony nie można użyć document.write: w razie potrzeby zastąpi ona zawartość strony.

Najprostszym sposobem, aby załadować skrypt dynamicznie z jQuery jest:

$.getScript(url); 

Innym sposobem jest stworzenie nowego <script> element i dodać go do dokumentu.

0

Musisz wstawić blok skryptu do DOM. Nie możesz po prostu zapisać go w dokumencie w ten sposób.

Użyj: $(document.createElement('script'));, a następnie ustaw wymagane atrybuty.

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

writeCapture.js (pełne ujawnienie: Jestem autor) może rozwiązać ten problem:

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

znalazłem ten sam problem z IE - nie wykonuje skrypt ładowany przy użyciu dokument .write, ale tworzenie elementu skryptowego DOM działało idealnie dobrze.

W twoim przypadku, jeśli masz tylko jeden skrypt, aby załadować w Source.html tylko zmodyfikować go do dynamicznego tworzenia skrypt DOM element. Będzie działał zarówno w trybie IE i FF . Ale jeśli masz wiele plików skryptów do dynamicznego ładowania, możesz nie być w stanie użyć tej techniki, ponieważ ta technika nie gwarantuje wykonania zamówienia w IE.

Proszę przejść do Google i szukać „jeszcze szybciej strony” i będzie można dostać bardzo ładny artykuł o dynamiczne ładowanie skryptów.

Nawiasem mówiąc, nie rozumiem, dlaczego nie można wykonać skryptu załadowanego przy użyciu document.write.

Również moja FF czekał na coś, jeśli mogę użyć document.write (to samo stało się z tobą !!). Nie jestem pewien co do przyczyny i może to być bardzo niski poziom. Więc proszę, nie używaj go z FF. Jeśli już zidentyfikowałeś przyczynę, udostępnij.

Powiązane problemy