遵循 Chrome 擴展清單 V3 規則,我想創建一個擴展程式,它偵聽特定的網路請求,并且,對于開始,只需將它們記錄到當前打開的選項卡的控制臺(稍后我想將自定義腳本和樣式添加到頁面中當前標簽)。
為此,我嘗試使用 chrome.scripting.executeScript。
當我從https://github.com/GoogleChrome/chrome-extensions-samples/blob/main/examples/page-redder/manifest.json實作示例時,它的作業方式與 chrome.action.onClicked 偵聽器的預期相同。
一旦我嘗試在 chrome.webRequest.onBeforeRequest 偵聽器中執行腳本,就會彈出此錯誤:
事件處理程式中的錯誤:TypeError:scripting.executeScript 呼叫錯誤(scripting.ScriptInjection 注入,可選函式回呼):引數“注入”錯誤:屬性“目標”錯誤:缺少必需的屬性“tabId”。在 chrome.webRequest.onBeforeRequest.addListener.urls ()
缺少必需的屬性 tabId?我認為它與生命周期有關,但我不知道該怎么做。這是我的清單:
{
"name": "Getting Started Example",
"description": "Build an Extension!",
"version": "1.0",
"manifest_version": 3,
"background": {
"service_worker": "background.js",
"matches": [ "<all_urls>"]
},
"host_permissions": [
"<all_urls>"
],
"permissions": [
"activeTab",
"tabs",
"webRequest",
"webNavigation",
"management",
"scripting"
]
}
這是我的腳本,我只是稍微修改了“變紅”的例子:
function reddenPage(url) {
console.log(url);
}
chrome.webRequest.onBeforeRequest.addListener((tab) => {
chrome.scripting.executeScript({
target: { tabId: tab.id },
function: reddenPage,
args: [tab.url],
});
},
{urls: ["*://*.google.com/*"]},
[]);
uj5u.com熱心網友回復:
我不知道確切的原因,但 Github 的腳本似乎不起作用。這是它的作業原理:
它不僅是幾個改變的括號,看tab而不是(tab),還有tab.tabId而不是tab.id:
chrome.webRequest.onBeforeRequest.addListener(tab => {
chrome.scripting.executeScript(
{
target: { tabId: tab.tabId },
function: reddenPage,
args: [details.url],
},
() => { console.log('ZZZ') });
}, {
urls: ['<all_urls>']
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/346910.html
標籤:谷歌浏览器 谷歌浏览器扩展 chrome-extension-manifest-v3
上一篇:無法在Release或Profile中運行flutterweb專案(無法讀取null的屬性(讀取“isAsync”))
