Chrome 扩展程序弹出窗口关闭在错误的时间触发
Chrome extension popup close fired at wrong time
我有一个chrome扩展,目前由背景页面和弹出页面组成。打开弹出窗口时会发生一些初始化。我正在使用 DOM 事件
doc.addEventListener('DOMContentLoaded', function() { ... }
而且行为是正确的。问题出在关闭弹出窗口时。由于 chrome 弹出窗口不会引发unload
事件,因此我使用的是此处建议的内容。这是我的代码
弹出窗口.js
bgPage = chrome.extension.getBackgroundPage();
bgPageManager = bgPage.manager(); // This is the exposed api from bg page
bgPageManager.init(chrome.runtime.connect({
name: 'P1'
}));
此处连接到运行时并将端口发送到后台页面,以便它可以侦听onDisconnect
事件。
背景.js
function init(port) {
port.onDisconnect.addListener(function() {
// Clean up happens here
stateManager.unregister();
});
}
这也行得通。
但问题是,这onDisconnect
弹出窗口打开时被触发,而不是在关闭时
onDisconnect
事件的文档是
允许添加和删除 Chrome 事件的侦听器的对象。
这不是每个有用的;)
那么我做错了什么,或者当我检测到弹出窗口关闭时有什么方法吗?
除非在弹出页面中有一些内容在收听chrome.runtime.onConnect
(从您的评论来看,似乎并非如此),否则chrome.runtime.connect()
将返回一个立即关闭的端口(因为没有人愿意听)。
不过,你肯定会让它比涉及getBackgroundPage
更困难。弹出窗口可以启动端口本身。您需要做的就是:
// popup code
var bgPort = chrome.runtime.connect({name: "P1"});
// background code
var popupPort;
chrome.runtime.onConnect.addListener(function(port) {
if(port.name == "P1") {
popupPort = port;
popupPort.onDisconnect.addListener(function() {
/* Clean up happens here */
});
}
});
如果您想保留已有的内容,要放入弹出窗口的最小代码是这样的:
var bgPort;
chrome.runtime.onConnect.addListener(function(port) {
if(port.name == "P1") {
bgPort = port;
}
});
请注意,在所有情况下,都需要在两端保留对 Port 对象的引用。如果垃圾回收器收集它,端口将断开连接。
最后,端口名称是可选的;如果它是您使用的唯一端口,则可以删除设置/检查名称的代码。
相关文章:
- Jquery函数在错误的时间提交
- Javascript设置日期不起作用,显示错误的时间
- Jquery 日期时间选取器错误
- 时刻.js时区值返回错误的时间戳
- 高图表日期时间从错误的日期开始
- 完整的日历错误时间在点击事件谷歌日历
- 使用cordova的android设备上的时间错误,但浏览器中的时间正确
- 检查JavaScript中的日期时间是否相等时出现错误结果
- jQuery setTimeout ajax递归函数在即时消息程序中短时间后抛出错误
- UTC Woes,Flot X轴时间错误
- 谷歌分析/Mixpanel/等.确定时钟错误时的事件时间戳
- new Date返回NaN或从服务器日期()开始的错误时间
- 为什么我从时间戳中得到错误的日期
- 在带有时间戳的日期之间计算时出现 NaN JavaScript 错误
- Chrome 扩展程序弹出窗口关闭在错误的时间触发
- 通过Javascript错误将考试时间设置为30分钟
- jQuery localtime,收到不受支持的日期/时间字符串错误
- j查询返回错误时间的日期格式
- 显示错误时间的完整日历月视图
- 谷歌融合表查询错误-时间比较