【问题标题】:Attaching callback to popup window in IE 9在 IE 9 中将回调附加到弹出窗口
【发布时间】:2011-04-22 19:52:42
【问题描述】:

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

【问题讨论】:

  • IE中是否触发了回调?
  • 不,甚至没有找到回调。 window.myPopupCallback 未定义。
  • 我指的是ready回调:-/

标签: javascript internet-explorer-9 window.open


【解决方案1】:

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

感谢来自Erika lot of help,我发现以下似乎工作得很好。

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 是个例外,它会尝试接近 1 或 2 毫秒。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-01
    • 1970-01-01
    • 2012-01-25
    相关资源
    最近更新 更多