This link (archived version) opisuje sposób wstrzyknąć kod skryptu w iframe:wstrzyknąć funkcji javascript w iframe
function injectJS() {
var iFrameHead = window.frames["myiframe"].document.getElementsByTagName("head")[0];
var myscript = document.createElement('script');
myscript.type = 'text/javascript';
myscript.src = 'myscript.js'; // replace this with your SCRIPT
iFrameHead.appendChild(myscript);
}
to jest OK, ale co, jeśli chcę wstawić obiekt funkcyjny w iframe i wykonać go w kontekście iframe? Powiedzmy, że mam:
function foo() {
console.log ("Look at me, executed inside an iframe!", window);
}
i chcę wstawić kod foo wewnątrz elementu iframe? (funkcja foo może być coś ładowane dynamicznie, nie mogę po prostu owinąć go w cudzysłowie)
ja naiwnie próbowałem:
var scriptFooString = "<script>" + foo.toString() + "</script>"
celu uzyskania kodu wewnątrz funkcji, ale
- Nie wiem, jak wstawić go w iframe HEAD (może z jquery?)
- Nie wiem, czy to jest właściwy sposób
- Nie wiem co się dzieje, kiedy, jeśli funkcja ta jest o wiele bardziej skomplikowane niż
- Nie wiem co się dzieje z podwójne i pojedyncze cudzysłowy w
scriptFooString
Każda podpowiedź?
Ok, ale jeśli wykonanie funkcji z okna nadrzędnego z 'klatek [0]. window.foo(); ', jest wykonywane w kontekście okna nadrzędnego. Włożenie go w głowę sprawiłoby, że zostałoby wykonane z kontekstem iframe, czy jestem w błędzie? (patrz http://jsfiddle.net/7rEXT/) – janesconference
Problem nie jest kontekstem, ale zakresem. Kiedy tworzysz funkcję foo, robisz to w ramach obecnego zakresu, wierzę, więc okno jest rodzajem okna, a nie ramek itp. Nadal musisz użyć 'myFrame.contentWindow' lub' frames [0] .window' inside funkcja dostępu do właściwego zakresu. Jeśli chcesz wstrzyknąć znacznik skryptu, możesz dołączyć go przez DOM. – EJTH
Zaktualizowałem moją odpowiedź, aby lepiej pasowało do Twojego zapytania. Chociaż muszę powiedzieć, że jeśli chcesz coś takiego zrobić, istnieje duże prawdopodobieństwo, że komplikujesz rzeczy i robisz to źle, lub robisz to mądrzej. – EJTH