編輯:剛發現這是一個鉻問題,代碼在Firefox中工作正常如何插入JavaScript文件到iframe中,然後在插入的javascript中調用函數?
我有一個網頁上的iframe,顯示一本書格式化爲html。我想在這個iframe中插入一些javascript以使本書更具動態性(例如點擊句子,顯示動畫等)。 iframe內容與父頁面位於同一個域中。
我可以將JavaScript插入到iframe中,但在插入的javascript中調用函數時出現錯誤。我所描述的下面的代碼不同位:
我父頁面的JavaScript是:
function iframeLoaded()
{
var iFrameID = document.getElementById('preview-iframe');
var jsLink = iFrameID.contentDocument.createElement("script");
jsLink.src="/tests/iframeAPI.js";
jsLink.type = 'text/javascript';
iFrameID.contentDocument.head.appendChild(jsLink);
iFrameID.contentWindow.initialiseApi()
}
和包含iframe中的HTML是:
<iframe id="preview-iframe" width="640" height="240" frameborder="0" src="./testpage.htm" onload="iframeLoaded()" scrolling="no"></iframe>
的iframeAPI.js的內容是:
window.initialiseApi = function() { alert("Hello world") }
在瀏覽器中查看iFrame的html顯示iFrameAPI.js標籤是inse直接進入iframe頭部,但當頁面加載時,我沒有看到警報彈出窗口。該錯誤出現在以下行:
iFrameID.contentWindow.initialiseApi()
Uncaught TypeError: Object [object Window] has no method 'initialiseApi'
但是,我可以在瀏覽器的JavaScript控制檯中運行此行並警告彈出工作正常。
任何幫助將不勝感激。
感謝,
布賴恩
編輯:我只是一個onload事件試圖確保在頁面加載,我仍然有問題:
我父頁面javascript現在是:
function iframeLoaded()
{
var iFrameID = document.getElementById('preview-iframe');
var jsLink = iFrameID.contentDocument.createElement("script");
jsLink.src="/tests/iframeAPI.js";
jsLink.type = 'text/javascript';
iFrameID.contentDocument.head.appendChild(jsLink);
jsLink.onLoad= iFrameLoaded();
}
function iFrameLoaded()
{
alert("Iframe loaded"); // Alert works ok
var iFrameID = document.getElementById('preview-iframe');
iFrameID.contentWindow.initialiseApi(); // Same error message on this line
}
謝謝ash,試過你的建議,但沒有運氣。看起來這也是一個只有鉻的問題。 – brif 2012-07-31 20:45:09
哇! (奇怪!)setTimeout(function(){iFrameID.contentWindow.initialiseApi();},500);雖然jquery不會觸發!再次感謝布萊恩 – brif 2012-07-31 21:07:42