Mam następujące:
$(document).ready(function() {
var myIframe = document.getElementById("myIframe");
var element = myIframe.contentDocument.createElement("script");
element.setAttribute("src", "/javascripts/library/jquery/jquery.min.js");
myIframe.contentWindow.document.getElementsByTagName("head")[0].appendChild(element);
$("#myIframe", top.document).load(function() {
alert("iframe has loaded");
var element = document.getElementById("myIframe").contentDocument.createElement("script");
element.setAttribute("src", "/javascripts/stuff.js");
myIframe.contentWindow.document.getElementsByTagName("body")[0].appendChild(element);
});
});
Otrzymuję ostrzeżenie o „załadowaniu iframe”.
stuff.js zawiera
$("body").css("backgroundColor", "yellow");
Oczekiwałbym więc, że tło tego elementu iframekolor zmieniłby się na żółty po załadowaniu iframe ... ale nic się nie dzieje. Próbowałem nawet otoczyć zawartość pliku stuff.js w bloku $ (document) .ready, ale uzyskałem te same wyniki.
Jeśli zaznaczę wszystko i wyświetlę źródło dla elementu iframe, Izobacz, że jquery.min.js i stuff.js znajdują się w ramkach iframe. Jeśli wstawię to źródło do osobnego pliku HTML i uruchomię go, kolor tła dokumentu zmieni się zgodnie z oczekiwaniami.
Jak mogę uruchomić mój skrypt javascript w pliku stuff.js, aby działał w ramce iframe po załadowaniu ramki iframe?
Odpowiedzi:
1 dla odpowiedzi № 1Możesz to również zrobić w bardziej jQuery sposób.
$("<script/>", {
src: "/path/to/javascript.js",
type: "text/javascript"
}).appendTo($("#iframe").contents().find("body"));
0 dla odpowiedzi nr 2
Do diabła, tak, wymyśliłem to!
Okazuje się, że to nie działało, ponieważ ustawiłem myIframe.contentDocument.designMode na „on”. Komentowanie sprawiło, że zadziałało. Mam nadzieję, że mogę go włączyć po załadowaniu pliku.j.j i wszystko będzie dobrze.