0

编辑:由于某种原因,间隔确实看到了一些东西,但是在没有进入 if 语句的情况下崩溃并停止循环

这是我的流量。

  • 窗口通过在同一域上打开弹出窗口window.open()
  • 弹出重定向到推特
  • 弹出窗口被重定向回同一个域(回调 url)
  • 弹出窗口中的变量需要发送回窗口。

这在 Chrome 中运行良好,但在 IE9 上中断。

我尝试过的(都在 chrome 中工作)

在弹出窗口中:

window.opener.function(data);
window.close();

在窗口中:

var checkInterval = setInterval(function(){
    if (win.variable){ // win = popup window!
        clearInterval(checkInterval);
        win.close();
       // works!
    }
}

但两者都不适用于 IE9。我该如何解决这个问题?

4

2 回答 2

2

当弹出窗口转到 twitter 时域不再相同,因此在 IE9 中尝试读取页面上的变量时会崩溃。

要么检查 window.opener 是否可用(意味着你在同一个域上)并在访问变量之前确保它相同(首选)或将 if 语句封装在 try/catch 中

var checkInterval = setInterval(function(){
    try {
       if (win.variable){ // win = popup window!
           clearInterval(checkInterval);
           win.close();
          // works!
       }
    } catch (e) {}
}
于 2013-03-12T13:33:00.510 回答
0

一个非常简单的方法是使用锚点将变量传回

因此,您的回调 url 将如下所示:

http://example.com/index/#var1:value1,value2/var2:value3,value4 ...

在 jQuery 中使用hashchange 插件将使您的生活变得非常轻松,以便处理您的问题。

此外,您可以使用适用于 IE9 的核心 Javascript使用hasher 微库

于 2013-03-12T15:02:42.783 回答