【问题标题】:IE 9 does not refresh windows with window.open, instead opens new windowIE 9 不使用 window.open 刷新窗口,而是打开新窗口
【发布时间】:2013-02-11 22:32:53
【问题描述】:

我有以下代码行,当点击链接时使用 jQuery 调用:

  alipayTransactionModalTrigger.click(function(e) {  
     e.preventDefault();             
     $.ajax({
        url: "doSomething",
        data: "p_locale=en-US",
        success: function(dataOut){
           if (dataOut == "hold") {
              ...do something...
           } else {   
              //open a modal over parent window
              alipayTransactionModal.dialog("open"); 
              //also open new tab/window
              var Payment = window.open("http://www.alipay.com", "Payment");                  
              Payment;                
              Payment.focus();
           }
        }
     });    
     return false;
  });

ajax 调用基本上只是检查一些值。成功呼叫正在发生,这不是问题。 通过使用框架名称,我试图在多次单击链接时强制刷新新打开的窗口/选项卡。这适用于 IE 8、Chrome 和 Firefox - 用户可以多次单击链接,并且只会打开一个新窗口一次 - 后续点击只会重新加载该窗口。

但是,IE 9 不会发生这种情况 - IE 9 每次都会打开一个新窗口/选项卡。有什么方法可以在 IE 9 中强制执行此行为?或者甚至只是解释为什么在 IE 9 中发生这种情况会很好 - 它是用户级别的设置吗?据我所知,当我在window.open() 中使用框架名称时,IE9 只是不知道我在指向什么。

我应该提到的另一件事 - .focus() 并不总是将窗口集中在第二次/第三次/等点击(似乎取决于浏览器和浏览器设置) - 但我已经问过这个问题 here 只是包括它在这里以防万一。

谢谢

【问题讨论】:

  • 另外,在变量中保留对窗口的引用:var w = window.open(....); .... w.focus();
  • 你是说这比我现在使用.focus() 更好吗?或者这应该解决我的问题?这似乎对是否在 IE 9 中打开新窗口没有影响。
  • 我是说当第二次点击链接时,使用变量w 而不是打开一个新窗口。应该易于实现并且适用于所有浏览器。
  • 你真的在使用“www.test.com”而不是正确的http://-prefixed url吗?新窗口是否与原窗口同源?
  • Christian - 我也尝试过,结果相同 EricLaw - 不,这不是我使用的实际网址 - 该网址是在其他地方生成的,所以为了简单起见,我只是插入了它

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


【解决方案1】:

从 ajax 回调中使用 window.open 打开一个窗口注定会被弹出窗口阻止程序阻止。我相信如果你禁用它,它会按预期工作。

在此处查看此答案。 Window.open blocked 你的窗口需要正确的上下文。

【讨论】:

  • 感谢 The Brain,我不知道这是个问题 - 我已将建议落实到 make the call synchronous - 那么是否应该绕过我之前看到的弹出窗口阻止程序警告? (我已经设置为始终允许,所以我再也看不到它们了)。我会赞成这个答案,但我还没有达到 15 代表,所以我不能。尽管如此,原来的问题仍然存在,IE9总是打开一个新窗口,并且不刷新原来的窗口。上面更新了代码以反映更改
【解决方案2】:

我没有用于测试的 IE9,但也许这有帮助

var openLink = (function() {
    var _popups = {};

    return function(link, name) {
        if (_popups.hasOwnProperty(name) === false) {
            _popups[name] = window.open();
        }

        _popups[name].location.href = link;
        _popups[name].focus();
    };
}());

Example

【讨论】:

  • 啊,你知道,当我尝试实现这个时,我意识到我可能需要为此添加更多上下文。这一切都发生在 ajax jquery 函数调用中(我将编辑原始帖子以显示更多上下文)。此外,在打开新窗口的点击之间,父窗口会重新加载 - 因此您在此处设置的 var 每次都会重置,因此 _popups.hasOwnProperty(name) === false 始终为真。但是,即使没有刷新页面,使用您的建议,新窗口也没有在 IE 9 中重新加载 - 它第一次打开,但随后的点击没有重新加载新窗口
  • 因此,由于某种原因,IE9 似乎不知道我在使用框架名称时要指出的内容。我不得不认为这是 IE9 的问题,因为它不会出现在 FF、Chrome 甚至 IE8 中
猜你喜欢
  • 1970-01-01
  • 2015-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-04
  • 1970-01-01
相关资源
最近更新 更多