【发布时间】:2012-07-31 17:25:01
【问题描述】:
编辑:刚刚发现这是一个 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
}
【问题讨论】:
标签: javascript html iframe