window.opener не определен в Microsoft Edge

У меня есть много всплывающих окон window.open, используемых для поиска элемента, которые вызывают функцию javascript из window.opener для выбора этого элемента (когда пользователь нажимает на него).

Это всегда работало во всех браузерах, но не в Edge. Я узнал, что window.opener является «неопределенным» только в Edge. Неважно, пробую ли я это локально или на своем веб-сервере, у меня та же проблема. И это не может быть междоменная вещь безопасности, мои всплывающие окна - это страницы с одного и того же веб-сайта.

Есть ли что-то, что я пропустил в Edge? Новое требование к тому, как мы используем window.open?

Например, если у меня есть кнопка ввода, которая делает:

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

и функция javascript в головной части, например:

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

Следующий код javascript из search.aspx не работает в Edge:

window.opener.SelectItem(123);

И если бы я изменил его на

alert(window.opener);

Я увижу, что это не определено.

Редактировать 1: Нет, это не дубликат Window.opener в Microsoft Edge undefined при работе на локальном хосте. Я уже прочитал этот вопрос, прежде чем задать свой. Моя проблема возникает не только с локального хоста, но и с веб-сервера. Это не проблема имени хоста.

Редактировать 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!


person Matt Roy    schedule 05.07.2017    source источник
comment
Эти решения помогают? stackoverflow.com/questions/31196295/   -  person AtheistP3ace    schedule 05.07.2017
comment
Нет. Я уже прочитал этот вопрос, прежде чем задать свой. Моя проблема возникает не только с локального хоста, но и с веб-сервера. Это не проблема имени хоста.   -  person Matt Roy    schedule 05.07.2017
comment
Я пометил этот вопрос, чтобы удалить повторяющийся тег. У меня была такая же ошибка. У меня были prod1.example.com и prod2.example.com (указывал на публичный IP), window.opener работал, но на каком-то компьютере, у которого был доступ к dev1.example.com (указывал на локальные IP), window.opener был не работает на prod1.example.com. Я подозреваю, что Edge пометил *.example.com как локальный, потому что если dev1.example.com, значит, он сломал prod1.example.com.   -  person Tom    schedule 18.04.2018
comment
Я тоже проголосовал за открытие. Я не могу понять поведение людей, голосующих за закрытие таких вопросов.   -  person Simon Bergot    schedule 13.07.2018
comment
не поддерживается. см.: caniuse.com/#feat=rel-noopener   -  person Steven Stark    schedule 12.03.2019


Ответы (1)


Вместо использования window.opener для получения ссылки на функцию родительского окна. Вы можете назначить функцию вновь открытому окну следующим образом:

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

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

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

В вашем всплывающем окне теперь вы можете вызвать SelectItem.

person gforce301    schedule 05.07.2017
comment
Я думал, что у вас есть хорошая идея, но, к сожалению, она тоже не работает. Я поставил alert(popup); перед вашим if, и в IE11, как и ожидалось, я получаю [object Window], но в Edge я получаю null. - person Matt Roy; 05.07.2017