我正在创建一个弹出窗口并为其附加一个回调函数。弹出窗口中有一个按钮,单击时会调用此回调。这适用于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);
});
答案 0 :(得分:3)
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 ms的间隔运行代码,而是更高一些,通常为10 ms。 Chrome是一个例外,因为它试图接近1或2毫秒。
在运行IE 7的一台 Windows XP计算机上,我遇到了一个问题,浏览器在启动弹出窗口时会冻结。窗口会弹出,但不会加载任何内容,浏览器的响应速度会变慢。但是,我已在其他几台运行Windows XP和IE 7的计算机上对此进行了测试,但无法重现该问题。