【发布时间】:2017-04-05 15:01:37
【问题描述】:
我有一个 Office 插件,可以通过
打开一个弹出式浏览器窗口popup = window.open("https://localhost:3000/#/new", "popup", "status=1, location=1, width=1000, height=1200")
此页面由 Angular 编码。为了启用插件和弹出窗口之间的通信,我在控制器中添加了一个侦听器。因此,他们可以通过postMessage相互发送消息。
app.controller("Ctrl", ["$scope", "$window", function($scope, $window) {
... ...
$window.addEventListener("message", receiveMessage, false);
}
通信正常,除非插件将弹出窗口的 url 更改为newUrl(其中newUrl 是另一个使用相同控制器的页面实例),通过
popup.location.href = newUrl
在视觉上,弹出窗口已经改变,但是之前的监听器没有被移除。因此,加载项发送的一条消息会被接收并处理两次(即,新页面和前一页面)。
有谁知道当插件改变弹出页面时如何正确清理监听器?
【问题讨论】:
标签: javascript angularjs popup window addeventlistener