在我阅读有关Event Page的文档后,我没有使用事件页面而不是背景页面的优势。
假设我有以下简单案例 -
的manifest.json
description
content.js
"background": {
"scripts": ["background.js"],
"persistent": false
},
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["content.js"]
}
]
background.js
chrome.runtime.sendMessage("Hi Background")
在这种情况下,无论chrome.runtime.onMessage.addListener(messageListener);
function messageListener (request, sender, sendResponse) {
alert(request);
}
是persistent
还是"persistent": false
,"persistent": true
中的监听器始终应该是醒来才能从{{1}获取消息因此background.js
无法进入暂停模式。
那么在这种情况下以及一般情况下,事件页面(content.js
)的好处是什么?请举个例子。
答案 0 :(得分:4)
事件页面的主要优点是通过在不使用时卸载后台脚本来释放RAM和CPU资源。
... background.js无法进入暂停模式。
它可以。即使您的事件页面使用了消息监听器,它仍会在一段时间后卸载。 Chrome会记住该页面已设置了侦听器,因此浏览器会在发送消息时唤醒该页面。
您可以尝试此实验:
的manifest.json
{
"manifest_version": 2,
"name": "Test",
"version": "0.0.1",
"description": "",
"background": {
"scripts": ["background.js"],
"persistent": false
},
"browser_action": {
"default_popup": "popup.html"
}
}
background.js
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
sendResponse({
msg: "it's alive!"
});
}
);
popup.html
<html>
<body>
<div id="text"></div>
<script src="popup.js"></script>
</body>
</html>
popup.js
chrome.runtime.sendMessage('hello',
function (response) {
document.getElementById('text').textContent = response.msg;
}
);