gpt4 book ai didi

javascript - 将回调附加到 IE 9 中的弹出窗口

转载 作者:行者123 更新时间:2023-11-29 20:17:41 25 4
gpt4 key购买 nike

我正在创建一个弹出窗口并为其附加一个回调函数。弹出页面中有一个按钮,单击时会调用此回调。这适用于 Firefox 4 和 Chrome 10,但不适用于 IE 9。我添加到窗口的“myPopupCallback”属性由 Firefox 和 Chrome 找到并执行。在 IE 中,它是未定义的。

IE 中是否存在某些导致将数据或函数附加到窗口时出现问题的问题?

主窗口代码

var popup = window.open(url, '', 'status=0,menubar=0,toolbar=0,resizable=1,scrollbars=1');
$(popup.document).ready(function()
{
popup.myPopupCallback = function(rows)
{
// ...do stuff with rows...
};
});

弹窗代码

$('#btn-ok').click(
function()
{
var rows = $('#rows');

// IE 9 throws an error on the next line because window.myPopupCallback is undefined
window.myPopupCallback(rows);
});

最佳答案

window.open() 是一个 non-blocking operation这意味着在新窗口完成打开之前,JavaScript 将移至下一行代码。因此,如果过早设置属性可能不会“坚持”。我自己也遇到了这个问题。

感谢a lot of help来自 Erik我发现以下内容似乎效果很好。

var popup = window.open(
url, '', 'status=0,menubar=0,toolbar=0,resizable=1,scrollbars=1'
);
$(popup.document).ready(function(){
var setPopupPropertiesInterval = setInterval(
function setPopupProperties() {
popup.myPopupCallback = function(rows)
{
// ...do stuff with rows...
};
if (popup.closed || popup.myPopupCallback) {
clearInterval(setPopupPropertiesInterval);
}
}, 1
);
});

这将一直尝试将函数添加到弹出窗口,直到它被添加或弹出窗口关闭。

在我的非常简短的测试中,它可以跨浏览器工作但我不确定如此快的间隔对性能的影响并且没有性能问题。请注意,大多数(所有?)浏览器实际上不会以 1 毫秒的间隔运行代码,而是更高一点的间隔,通常是 10 毫秒。 Chrome 是一个异常(exception),因为它试图接近 1 或 2 毫秒。

运行 IE 7 的 Windows XP 机器上,我遇到了浏览器在启动弹出窗口时卡住的问题。窗口会弹出,但不会加载任何内容,浏览器响应速度会变慢。但是,我已经在其他几台运行 Windows XP 和 IE 7 的机器上对此进行了测试,但无法重现该问题。

关于javascript - 将回调附加到 IE 9 中的弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5759447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com