我有很多弹出窗口。打开,用于搜索一个项目,从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版本中的一个错误!
答案 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
。