编辑:刚刚发现这是一个 chrome 问题,代码在 Firefox 中运行良好
我在网页上有一个 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 标记已正确插入 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
}