Аддин больше не может получать postMessage после перезагрузки всплывающего окна

Я делаю надстройку Excel с помощью Excel JavaScript API. В этой надстройке есть кнопка, нажатие на которую запускает popup = window.open("https://localhost:3000/#/new/", "popup", "width=1000, height=1100") и всплывающее окно браузера.

Во всплывающем окне я мог бы использовать следующий код для отправки сообщения надстройке:

if ($window.opener !== null) {
    alert($window.opener.location.href); // https://localhost/App/Home.html?et=
    $window.opener.postMessage(msg, $window.opener.location.href);      
}

И в надстройке я мог бы использовать следующий код для получения сообщения из всплывающего окна:

function receiveMessage(event) {
    console.log("RECEIVED: " + JSON.stringify(event.origin));
    if (event.origin === ...) {
        action(event.data);
    }
};

Так что это работает хорошо: когда надстройка получает сообщение, она показывает RECEIVED: "https://localhost:3000".

Однако я понял, что если я обновлю всплывающее окно на cmd+r, всплывающее окно все еще может отправить сообщение ($window.opener.location.href все еще то же самое), но надстройка больше НЕ сможет его получить; RECEIVED: "https://localhost:3000" больше НЕ отображается.

Кто-нибудь знает, что случилось и как это исправить?


person SoftTimur    schedule 10.05.2017    source источник


Ответы (1)


Можете ли вы попробовать работать с диалоговым API надстройки Office вместо window.open? Он предназначен для использования с надстройками. Обзор см. в разделе Использование диалогового окна API

person Rick Kirkham    schedule 10.05.2017
comment
Спасибо... Я собираюсь попробовать Dialog API для следующей версии. Для этой версии я хотел бы сделать все возможное с помощью window.open... - person SoftTimur; 10.05.2017