2016-01-17 104 views
0

這是我的package.json,但我的background.js沒有在後臺運行。我一直在嘗試不同的東西,但一直未能弄清楚。在此先感謝您的幫助,如何獲得Chrome擴展的內容腳本在後臺?

{ 
    "manifest_version": 2, 
    "name": "Focus", 
    "version": "1.9.3", 
    "description": "Block distracting websites and get inspired to focus on what's important", 
    "background_page": "background.html", 
    "icons": { 
    "16": "inspirelogo16.png", 
    "48": "inspirelogo48.png", 
    "128": "inspirelogo128.png" 
    }, 
    "browser_action": { 
    "default_icon": "inspirelogo19.png", 
    "default_title": "Inspire Router", 
    "default_popup": "/pages/popup.html" 
    }, 
    "permissions": [ 
    "background", 
    "notifications", 
    "tabs", 
    "<all_urls>", 
    "webRequest", 
    "*://*.google.com/" 
    ], 
    "background": { 
    "scripts": [ 
     "background.js" 
    ], 
    "content_scripts": [ 
     { 
     "matches": ["<all_urls>"], 
     "js": ["background.js"] 
     } 
    ], 
    "persistent": true 
    }, 
    "options_page": "/pages/fieldpage.html", 
    "content_security_policy": "script-src 'self' 'unsafe-eval' chrome-extension://bjmcjeffnloaojffcbaekmcokegnejlf/pages/inspire.html http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js https://ssl.google-analytics.com/ga.js http://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js https://connect.facebook.net https://www.facebook.com https://chrome.google.com https://chrome.google.com; object-src 'self'" 
} 

回答

2

你應該把content_script背景之外,像

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

以及由@minj你應該刪除background_page屬性提及。 (您使用它或background之一)

此外,背景運行在其自己的頁面上,而不是在瀏覽器中看到的頁面上運行。你可以找到它。

如果你想有一個腳本都在BG和內容腳本訪問,就像共享功能的utils.js文件,你可以把它添加到background.scriptscontent_scripts.js陣列

你應該想到的背景頁面作爲附加頁面(您可以直接訪問chrome://extensions/並在您的擴展上單擊background page),並與您的瀏覽器中打開的選項卡分開。例如,您不能從背景頁面訪問您在瀏覽器中查看的頁面的dom元素。

例如,當您重新加載普通頁面(與上面提到的bg頁面相反)時,bg頁面和它的變量不會刷新。他們只是兩個不同的選項卡。

但是,內容腳本只是在與content_scripts.matches匹配的頁面中加載的腳本,就好像它們是從頁面本身加載的一樣。他們不堅持在頁面之間或共享信息。

您可能想同時與dom元素進行交互並擁有持久性bg腳本。爲此,您使用消息傳遞協議,使內容腳本和bg頁面之間進行異步。我通常使用bg頁面作爲持久性控制器,從內容腳本獲取信息並向它們發送訂單。

+0

謝謝,那麼你如何在瀏覽器中的背景js文件來看,無論哪個頁面。 –

+0

@YoniBinstock帶腳本標籤,照常。看到我的答案。 – minj

+0

更新了回覆,是的,刪除我沒有抓住的'background_page' – Guig

1

刪除background_page,因爲它覆蓋了background。你只能使用其中一種,而不能兩種。

另外,通過定期script標籤添加腳本background.html文件:

<script type="application/x-javascript" src="/background.js"></script> 
相關問題