2017-08-11 146 views
0

我想從後臺腳本注入一些代碼到選定的選項卡上下文中,但我遇到了一些權限問題。問題executeScript權限

manifest.json的

{ 
    "manifest_version": 2, 
    "name": "prova", 
    "version": "1.0", 
    "permissions": [ 
    "activeTab" 
    ], 
    "background": { 
    "scripts": ["background.js"], 
    "persistent": false 
    }, 
    "content_scripts": [ 
    { 
     "matches": ["https://*"], 
     "css": ["mystyles.css"], 
     "js": ["myscript.js"] 
    } 
    ] 
} 

background.js

chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) { 
    chrome.tabs.executeScript(null,{code:"console.log('Not done!');"}); 
    sendResponse({}); 
    }); 

myscript.js

chrome.runtime.sendMessage({}, function(response) { 
    console.log("Done!"); 
    }); 

這是電子在運行tabs.executeScript

未選中runtime.lastError:RROR出現在背景控制檯頁面無法訪問 內容。擴展清單必須請求 訪問相應主機的權限。

我真的很感激每一個建議。 非常感謝。

+0

有關激活此權限的操作列表,請參閱[activeTab文檔](https://developer.chrome.com/extensions/activeTab)。 – wOxxOm

回答

0

Programmatic injection部分:

把代碼插入到頁面中,您的分機必須具有頁面跨域權限。它也必須能夠使用chrome.tabs模塊。您可以使用清單文件的權限字段獲得這兩種權限。

這意味着您需要爲要運行代碼的主機請求許可證。 讓你從manifest.jsonpermissions部分應該是這樣的:

"permissions": [ 
    "tabs", 
    "http://*.example.com/", 
] 

host match patterns看看。

編輯1:

我也注意到,您使用content-scriptprogrammatic injection。這兩種在選項卡中運行代碼的方式幾乎可以完成相同的工作,但方式各不相同。

  1. content_script清單中的部分有助於在每個與主機模式匹配的頁面上運行腳本。
  2. 編程注入(PI)也有助於運行代碼(文件或字符串)。但是,應該通過清單中的部分permissions設置主機權限。 PI在腳本需要運行時很少運行,而不是在每個頁面上運行。
+0

我將權限修改爲:「權限」:[ 「選項卡」, 「」, ]但仍然出現錯誤。我不知道如何解決這個問題 –

+0

我利用程序注入僅用於訪問頁面上下文並攔截xhr調用。 –