2017-07-24 83 views
1

當我閱讀關於Event Page的文檔後,我沒有獲得使用活動頁面而非背景頁面的優勢。活動頁面和背景頁面之間的差異

假設我有遵循簡單的情況下 -

manifest.json的

"background": { 
    "scripts": ["background.js"], 
    "persistent": false 
}, 
"content_scripts": [ 
    { 
     "matches": ["<all_urls>"], 
     "js": ["content.js"] 
    } 
] 

content.js

chrome.runtime.sendMessage("Hi Background") 

background.js

chrome.runtime.onMessage.addListener(messageListener); 

function messageListener (request, sender, sendResponse) { 
    alert(request); 
} 

在這種情況下,persistent是否"persistent": false"persistent": truebackground.js聽者總是應該爲了得到從content.js,因此該background.js不能去掛起模式的消息是清醒的。

那麼在這種情況下和一般情況下,活動頁面("persistent": true)有什麼好處?請舉一個例子。

+3

它會被閒置約5秒鐘後卸載,這是賣點。來自內容腳本的消息將加載它。沖洗並重復。 – wOxxOm

+0

老問題與我的答案相同的主題:https://stackoverflow.com/questions/23935117/event-pages-and-background-pages/23935436 – Xan

回答

3

事件頁面的主要優點是通過在不使用背景腳本時卸載後臺腳本來釋放RAM和CPU資源。

... background.js無法進入掛起模式。

它可以。即使你的事件頁面使用了消息監聽器,它仍然會在一段時間後被卸載。 Chrome記得頁面已經設置了監聽器,所以當消息發送時瀏覽器會喚醒頁面。

你可以試試這個實驗:

  1. 添加此擴展

的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; 
    } 
); 
  • 打開Chrome的任務管理器,並等待幾秒鐘,直到測試擴展消失(卸載)。如果你沒有看到它(它已經卸載),你可以重新加載擴展。
  • 點擊擴展程序的瀏覽器動作,您將在窗口中看到來自事件頁面的消息。另外,您可以在Task擴展的任務管理器中看到兩個進程:一個是彈出窗口,另一個是事件頁面。
    彈出窗口關閉後,事件頁面會在幾秒鐘內再次卸載。
  • +0

    謝謝。所以作爲這個擴展的用戶,它對''persistent':false'或''persistent':true'都不會有任何改變。但作爲一個開發者,我可能更喜歡''persistent':true'而不是''persistent':false'? – URL87

    +0

    @ URL87,IMO,目標是通過創建更好的軟件(減少資源消耗)讓用戶開心:)。 – Deliaz

    +0

    當然,爲什麼不把所有的擴展設置爲''persistent':false',可能有什麼理由。 – URL87