我正在构建Chrome扩展程序,以跟踪我在某些网站上花费的时间。我只想在活动标签中计算时间。因此,我的扩展程序页面onUpdate
background.js
个事件监听器
加载页面时,onUpdate
事件会多次触发,但这些事件中只有一个是更改网址。您可以在此处查看有关此问题的进一步说明:Chrome extension, javascript: Why is this firing twice?,但这不是我的问题。因此,changeInfo
个对象中只有一个具有url
属性。
我想从onUpdate
事件中获取新网址,并使用它来确定要发送到我的内容脚本的邮件。我可以在任何情况下向内容脚本发送消息,但是当我在onUpdate
事件之后引入检查以确保我只在有URL属性时触发,我的onMessage
事件内容脚本停止触发。这是代码:
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
if (changeInfo.url) {
chrome.storage.sync.set({'on_site1': "true"}, function() {
chrome.tabs.sendMessage(tabId, {"message": "moved_to_site1"}, function() {});
});
}
})
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
chrome.runtime.sendMessage({"message": "this is a response"});
if (request.message === "tab_changed") {
foo1();
} else if (request.message === "moved_to_site1") {
foo2();
} else {
foo3();
}
}
);
在上述条件下,onMessage
事件不会触发。诀窍在background.js
,在这里。当它更改为以下内容时:
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
chrome.storage.sync.set({'on_site1': "true"}, function() {
chrome.tabs.sendMessage(tabId, {"message": "moved_to_site1"}, function() {});
});
})
现在在onMessage
中触发content.js
事件,一切正常,但这不允许我检查我更改的URL。我需要能够在发送消息之前检查URL是什么,我无法弄清楚这个奇怪问题的解决方法,甚至是为什么会发生这种情况。任何见解都将不胜感激。