编辑:刚发现这是一个铬问题,代码在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