在Microsoft Edge中未定义window.opener

时间:2017-07-05 16:10:01

标签: javascript microsoft-edge window.opener

我有很多弹出窗口。打开,用于搜索一个项目,从window.opener回调一个javascript函数来选择该项目(当用户点击它时)。

这在所有浏览器中都有效,但它并没有进入Edge。我发现window.opener是" undefined"仅限Edge。 如果我在本地或在我的网络服务器上尝试它并不重要,我遇到了同样的问题。 它不是一个安全的跨领域的东西,我的弹出窗口来自同一个网站。

我对Edge有什么看法吗?我们使用window.open的方式有了新的要求吗?

例如,如果我有一个输入按钮:

window.open('search.aspx','searching');

和javascript函数进入头部,如:

function SelectItem(ID)
{
    // insert magic here
    alert('test');
}

来自search.aspx的以下javascript代码在Edge中不起作用:

window.opener.SelectItem(123);

如果我把它改成

alert(window.opener);

我会看到它未定义。

编辑1: 不,它不是Window.opener in Microsoft Edge undefined when running at localhost的副本。在问我之前我已经读过这个问题。我的问题不仅来自localhost,还来自web服务器。这不是主机名问题。

编辑2: 测试它的简单方法,我从w3schools得到同样的问题"自己试试"例如:https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_win_open3

更新(解决方案):我在Edge 38.14393(Windows 10版本1607)中遇到此问题。我只是升级到Win10版本1803(Edge 42.17134),现在它按预期工作正常。可能是以前Edge版本中的一个错误!

1 个答案:

答案 0 :(得分:0)

而不是使用window.opener来获取对父窗口函数的引用。您可以像这样为新打开的寡妇分配一个功能:

function SelectItem(ID)
{
    // insert magic here
    alert('test');
}

var popup = window.open('search.aspx','searching');

if(popup) {
    popup.SelectItem = SelectItem;
}

在弹出窗口中,您现在可以拨打SelectItem