事件页面和背景页面之间的差异

时间:2017-07-24 17:40:20

标签: javascript google-chrome google-chrome-extension

在我阅读有关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)的好处是什么?请举个例子。

1 个答案:

答案 0 :(得分:4)

事件页面的主要优点是通过在不使用时卸载后台脚本来释放RAM和CPU资源。

  

... background.js无法进入暂停模式。

它可以。即使您的事件页面使用了消息监听器,它仍会在一段时间后卸载。 Chrome会记住该页面已设置了侦听器,因此浏览器会在发送消息时唤醒该页面。

您可以尝试此实验:

  1. 添加此扩展程序
  2. 的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;
        }
    );
    
    1. 打开Chrome的任务管理器,等待几秒钟,直到测试扩展程序消失(卸载)。如果您没有看到它(它已经卸载),您可以重新加载扩展。
    2. 点击扩展程序的浏览器操作,您将在窗口内看到来自活动页面的消息。此外,您可以在任务管理器中看到测试扩展的两个进程:一个是弹出窗口,第二个是事件页面。
      关闭弹出窗口后,事件页面会在几秒钟后再次卸载。