2017-06-20 102 views
1

是否有可能在webRequest的urls參數中有多個目標。怎麼樣?是否有可能在webRequest目標中有多個URL

這是一個沒有工作,給了我這個錯誤的例子:

The webRequest.addListener filter doesn't overlap with host permissions. 

**** ****修訂:

這是示例代碼main.js

myArray=["yahoo.com", "google.co.uk"]; 
patterns=[]; 
for (var x=0; x<myArray.length; x++) 
{ 
    var aURL="\"https://*."+myArray[x]+"/*\"" 
    patterns.push(aURL); 
}//end for 

console.log("the array: "+patterns); 


function logURL(requestDetails) 
{ 
    console.log("inside logURL"); 
    console.log("*******************************"); 
    console.log("Loading: " + requestDetails.url); 
    console.log("*******************************"); 
}//end logUTL 

browser.webRequest.onBeforeRequest.addListener(
    logURL, 
    {urls: patterns, 
    types: ["main_frame"]} 
); 

這是清單:

{ 
    "manifest_version": 2, 
    "name": "test", 
    "version": "1.0", 
    "description": "", 
    "background": { 
    "scripts": ["main.js"] 
    }, 

    "icons": { 
    "64": "icons/myicon.png" 
    }, 

    "permissions":[ 
    "<all_urls>", 
    "activeTab", 
    "tabs", 
    "activeTab", 
    "webRequest" 
    ] 
} 

回答

1

您必須爲模式使用數組。

myArray=["yahoo.com", "google.co.uk"]; 
patterns=myArray.map(item=>`https://*.${item}/*`) 

console.log("the array: "+patterns); 

function logURL(requestDetails) 
{ 
    console.log("inside logURL"); 
    console.log("*******************************"); 
    console.log("Loading: " + requestDetails.url); 
    console.log("*******************************"); 
}//end logUTL 

browser.webRequest.onBeforeRequest.addListener(
    logURL, 
    {urls: patterns, 
    types: ["main_frame","xmlhttprequest"]} 
); 

addListener第二個參數是一個RequestFilter

+0

我更新了代碼。還是行不通。我收到我在帖子中提到的錯誤。偵聽器不接受具有多個URL的數組。我檢查了MDN,並找不到具有多個URL的任何示例。 – user6875880

+0

那麼,那是因爲你添加了生成無效url的代碼。一個URL不應該包含引號。我也建議你使用array.map()而不是for循環。 – Forivin

+0

我更新了我的答案中的代碼,向您展示瞭如何使用array.map實現與for循環(但不帶無效引號)一樣的事情。 – Forivin

0

任何增加雙引號的理由?

-var aURL="\"https://*." + myArray[x] + "/*\"" 
+var aURL="https://*." + myArray[x] + "/*" 
相關問題