重新加载弹出窗口后,Addin无法再接收postMessage

时间:2017-05-10 15:36:02

标签: cross-domain office-js page-refresh postmessage window.opener

我正在Excel JavaScript API创建Excel加载项。此加载项中有一个按钮,单击它会启动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"不再显示。

有谁知道发生了什么以及如何解决?

1 个答案:

答案 0 :(得分:1)

您可以尝试使用Office Add-in Dialog API而不是window.open吗?它设计用于加载项。有关概述,请参阅:Use the Dialog API