我创建了一个非常简单的Chrome扩展程序供个人使用,如果在打开了特定网站的标签页中更改了DOM元素并将其切换为活动标签页,则向我发送了浏览器通知。
如果该选项卡未处于活动状态且未打开(预期的/所希望的行为),它将起作用,但是除非该选项卡处于活动状态,否则最近通知将不再发送。我没有更改任何代码,因此不确定最近的Chrome更新是否更改了API的行为。
这是我的代码:
manifest.json
{
"name": "New Element Notifier",
"version": "1.0",
"description": "Creates notification if new element exists.",
"permissions": [
"notifications"
],
"background": {
"scripts": ["background.js"],
"persistent": false
},
"content_scripts": [
{
"matches": ["https://*.website.com/*"],
"js": ["jquery.min.js", "website.js"],
"run_at": "document_end"
}
],
"web_accessible_resources": [
"*.wav"
],
"manifest_version": 2
}
background.js
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
if (request.type == "new-element") {
chrome.tabs.update(sender.tab.id, {active: true});
var options = {
type: "basic",
title: "New Element",
message: "A new element exists!",
iconUrl: "icon.png"
}
chrome.notifications.create(options);
sendResponse({confirm: "tab changed"});
}
});
website.js
var elementContainer = document.querySelectorAll(".items-container")[0];
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
chrome.runtime.sendMessage({type: 'new-element'}, function(response) {
console.log(response.confirm);
});
}
});
});
observer.observe(elementContainer, {characterData: true, childList: true, subtree: true});
由于长期运行良好,因此不确定发生了什么。任何帮助,将不胜感激!