我創建了Google Chrome瀏覽器操作擴展。它不需要使用彈出頁面。 它有一個持續分析頁面源數據的後臺持久化進程/頁面。但是,這是一個單獨的過程,我不想在後臺執行UI編程注入,就像官方的例子。如何使用內容腳本進行onClicked程序化注入?
我設計了在用戶頁面頂部動態生成UI(結果)的腳本,當點擊Action圖標時需要顯示該腳本。我需要使用內容腳本來完成這個程序化注入,而不是後臺或彈出頁面。
但它不起作用,因爲內容腳本是一個'孤島',不能與其他擴展進行通信,並且沒有對Chrome瀏覽器的完全訪問權限。因此,在內容腳本使用下面的代碼時:
chrome.extension.sendMessage({}, function(response) {
var readyStateCheckInterval = setInterval(function() {
if (document.readyState === "complete") {
clearInterval(readyStateCheckInterval);
chrome.browserAction.onClicked.addListener(function(tab) {
chrome.tabs.executeScript(null, {file: "content_script.js"}); }
這是我的清單文件的一部分:
"background": {
"scripts": [
"src/bg/background.js"
],
"persistent": true
},
"page_action": {
"default_icon": "icons/icon19.png",
"default_title": "Show my visitors"
},
"permissions": [
"*://*.google.com/*",
"background"
],
"content_scripts": [
{
"matches": [
"*://*.google.com/*"
],
"js": [
"src/inject/inject.js"
]
}
]
它不起作用,因爲內容腳本pressumably沒有訪問browserAction.onClicked方法。當使用內容腳本單擊動作擴展圖標時,我確實需要進行編程式注入。有什麼建議麼?
謝謝@Xan。我將使用消息傳遞接口從後臺偵聽器向內容腳本發送通知,無論何時單擊圖標以激活注入的腳本。 – 2015-02-09 15:08:50
請考慮其含義:如果內容腳本始終被注入但很少被激活,這意味着您總是使用一些資源,例如匹配的每個選項卡的內存。如果內容腳本不做別的事情,那麼切換到PI可能是值得的。 – Xan 2015-02-09 15:11:21
當然,正如我在我的文章中指出的那樣,程序注入是我需要的方式。自動注入內容腳本的清單文件僅供參考。謝謝 – 2015-02-09 16:03:26