gpt4 book ai didi

javascript - Tapestry 区域更新后,IE 中的 iFrame OnLoad 事件未触发

转载 作者:行者123 更新时间:2023-11-28 08:29:45 26 4
gpt4 key购买 nike

我有一个 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/

26 4 0
文章推荐: javascript - ember 模板中的循环完成后执行 jQuery 函数
文章推荐: c++ - 函数的复杂参数
文章推荐: javascript - HTML & CSS