This link (archived version) mô tả cách tiêm mã từ một kịch bản vào iframe:tiêm một hàm javascript vào 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);
}
Đó là ok, nhưng những gì nếu tôi muốn chèn một đối tượng hàm vào iframe và làm cho nó được thực thi trong ngữ cảnh iframe? Giả sử tôi có:
function foo() {
console.log ("Look at me, executed inside an iframe!", window);
}
và tôi muốn chèn mã của foo vào khung nội tuyến? (chức năng foo có thể được một cái gì đó nạp tự động, tôi không thể chỉ quấn nó trong dấu ngoặc kép)
Tôi ngây thơ thử:
var scriptFooString = "<script>" + foo.toString() + "</script>"
để lấy mã bên trong hàm, nhưng
- Tôi không biết cách chèn nó vào HEAD khung nội tuyến (có thể với jquery?)
- Tôi không biết đó có phải là cách thích hợp không
- Tôi không biết những gì sẽ xảy ra khi nếu chức năng là phức tạp hơn cách mà
- Tôi không biết điều gì xảy ra với dấu ngoặc kép và duy nhất trong
scriptFooString
Bất kỳ gợi ý?
Ok, nhưng nếu tôi thực thi hàm từ cửa sổ chính có 'khung [0]. window.foo(); ', nó được thực thi trong bối cảnh cửa sổ chính. Chèn nó vào đầu nó sẽ được thực thi với bối cảnh khung nội tuyến, tôi có sai không? (xem http://jsfiddle.net/7rEXT/) – janesconference
Vấn đề không phải là ngữ cảnh, nhưng phạm vi. Khi bạn thực hiện hàm foo, bạn làm cho nó nằm trong phạm vi hiện tại tôi tin, vì vậy cửa sổ là cửa sổ cha và không phải là khung hình. Bạn vẫn sẽ cần phải sử dụng 'myFrame.contentWindow' hoặc' frames [0] .window' bên trong chức năng truy cập phạm vi chính xác. Nếu bạn cần phải tiêm một thẻ script, bạn có thể gắn nó thông qua DOM. – EJTH
Tôi đã cập nhật câu trả lời của mình để phù hợp hơn với truy vấn của bạn. Mặc dù tôi phải nói rằng nếu bạn cần phải làm một cái gì đó như thế này, rất có thể là bạn đang overcomplicating mọi thứ, và rằng bạn đang làm điều đó sai, hoặc có thể làm nó thông minh hơn. – EJTH