gpt4 book ai didi

javascript - IE9 window.open 问题

转载 作者:行者123 更新时间:2023-11-28 19:31:17 27 4
gpt4 key购买 nike

我不知道发生了什么,但 IE 的 window.open 工作可怕!
我有一段 JavaScript 代码,它从打开第二个窗口(在同一域内,弹出窗口被阻止关闭)的 Angular Controller 调用,并尝试在第二个窗口上调用 JavaScript 方法。

我的代码:

var newWindow = $window.open('somefile.html?' + Math.random(1000));                    
var fn = function () {
//alert('I got called');
newWindow.display($scope.mymsg);
}

if (newWindow.addEventListener)
newWindow.addEventListener("load", fn, false);
else if (newWindow.attachEvent)
newWindow.attachEvent("onload", fn);
else
newWindow.onload = fn;

我需要支持 IE8 和 IE9。我摆弄了代码并让它在 IE8 上工作,但我无法让它在 IE9 上工作。
如果我取消注释该警报,在 IE9 中,我永远不会看到这个。我不知道为什么,因为我正确附加了 onload 处理程序。我怀疑存在某种竞争条件,但如果是这种情况,我会在新窗口的 display() 中遇到问题,但它甚至不会到达那里,因为 onload 没有被调用。

更新:因此,使用 jQuery 包装新创建的窗口很有帮助:

var newWindow = $window.open('somefile.html?z=' + Math.random(1000));
$(newWindow).load(function () { this.display($scope.mymsg); });

我还添加了我之前错过的虚拟“z”参数。我几乎可以正常工作了。现在,当您第一次打开此页面并快速单击按钮打开第二个窗口时,第二个窗口在 IE8 中打开为空白(其中应该有一些传递给它的消息)。但是,如果您打开页面并等待几秒钟,第二个窗口将正确打开,显示传入的消息。
我还在第二个窗口的 display() 方法中添加了 $(document).ready() 。
我之前没有提到的另一件事,但我认为可能与此有关,是打开此窗口的整个机制被包装在 $q.all() 内。这是因为在打开第二个窗口之前,我调用了保存数据并返回验证消息。我想知道 q 是否发生了某些事情,从而导致了这种竞争条件。

更新2:将代码移至 $q 中 promise 链中的最后一个 promise 。所以现在看起来像这样:

$q.all([
//load data and put validate errors into $scope.mymsg
]).then(
function ()
{
$(document).ready(function () {
var newWindow = $window.open('somefile.html?z=' + Math.random(1000));
$(newWindow).load(function () { this.display($scope.mymsg); });
});
},
function ()
{

}
);

问题仍然发生,但少了很多。这绝对是一个竞争条件,但我无法弄清楚。如果您打开某些页面并单击按钮打开第二个窗口而不等待页面完全加载,则在某些随机情况下仍然可能会发生这种情况。

最佳答案

看起来当 fn 附加到 newWindow 的脚本沙箱时,然后 newWindow 变量fn 在子级中实际执行时,父级超出了范围。

您是否在父级中尝试过类似的操作:

popupParameters = {
foo: 'bar'
};

这在子项的 script 标记中:

popupParameters = window.opener.popupParameters;
alert(popupParameters.foo);

window.opener应该在 IE 8 和 9 中工作......我认为。

关于javascript - IE9 window.open 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26724165/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com