我有一个 Tapestry 区域,里面有一个 <iframe>
元素。我想在 iframe 加载完成时运行一个简单的 JS 函数(只是隐藏和启用一些东西,没什么花哨的)。
在 Chrome 和 Firefox 中,它工作得很好,但我在 IE 9 中遇到了问题。
function afterExportLoad() {
// hide throbber gif
// enable submit button
}
所以,自然地,我尝试将它绑定(bind)到 iframe 像这样(内联)
<iframe onload="afterExportLoad()" .../>
通过 PrototypeJS
exportFrame.observe('load', afterExportLoad);
通过原生 JS
if (window.addEventListener) {
exportFrame.addEventListener("load", afterExportLoad, false);
} else if (window.attachEvent) {
exportFrame.attachEvent("onload", afterExportLoad);
} else {
exportFrame.onload = afterExportLoad;
}
使用上述任何方式,它都可以在除 IE 之外的所有浏览器中运行,但在 IE 中,加载 iframe 后,gif 会“卡住”,并且按钮仍处于禁用状态。
有没有办法让它在 IE9(以及可能的任何其他 IE 版本)中工作?
谢谢:)
最佳答案
所以,我摆弄了一下并找到了这个解决方案:
在功能中添加了浏览器检查
function afterExportLoad() {
if (document.getElementsByName('downloadFrame').length > 0) {
var exportFrame = document.getElementsByName('downloadFrame')[0];
if ((Prototype.Browser.IE && exportFrame.readyState == "complete") || (!Prototype.Browser.IE)) {
// my stuff
}
}
}
更改了事件
<iframe onreadystatechange="afterExportLoad();" ...>
在另一个函数中监听 iframe 所在的区域更新
if (document.getElementsByName('downloadFrame').length > 0) {
var exportFrame = document.getElementsByName('downloadFrame')[0];
if (!Prototype.Browser.IE) {
exportFrame.stopObserving('readystatechange', exportLoad);
exportFrame.onload = exportLoad;
}
}
如果有人提出更好的解决方案,请告诉我:)
关于javascript - Tapestry 区域更新后,IE 中的 iFrame OnLoad 事件未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22011169/