我正在创建一个弹出窗口并向其附加回调函数。弹出窗口页面中有一个按钮,单击时会调用此回调。这适用于 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/