簡體   English   中英

Chrome擴展程序所應用的URL超出了應有的數量

[英]Chrome Extension applying to more URLs than it should be

因此,我正在嘗試進行擴展,使其僅適用於說www.google.com/bbb及其子頁面,例如www.google.com/bbb/ccc,而不適用於www.google.com/aaa。

我的清單具有以下權限:

  "permissions": ["tabs", "http://www.google.com/bbb*"],

但這仍然適用於www.google.com之下的任何頁面,而不僅僅是我想要的www.google.com/bbb。

所有這些都在background.js中運行。

docs來看還不是很清楚,但是(可能是bug或功能)可以在manifest的permissions屬性中聲明的主機匹配模式並不關心路徑:

"[scheme]:[host]/*"

它僅適用於schemehost並且將忽略path部分。


由於您似乎是通過語法進行注入的,因此可以根據路徑手動進行過濾:

/* In `manifest.json` */
...
"permissions": [
    "tabs", 
    "http://www.google.com/"
],
...

/* In `background.js` */
// ...some event was captured, involving tab <tabX>...
...
var urlRegex = /^http:\/\/www.google.com/bbb/;
if (urlRegex.test(tabX.url)) {
    injectCSS(tabX.id);
}   // ...else do not inject CSS
...

注意 :如果沒有“ http://www.google.com/ ”權限,此方法同樣可以很好地工作,但是包含它的效率更高,因為它減少了背景頁面必須檢查(和拒絕)的URL數量。 即,只需檢查以“ http://www.google.com/ ”開頭的網址

我知道這是一個古老的問題,但這在長時間的搜尋之后對我有所幫助...(╭ರ_•́)

您可以將文件添加到清單文件的"content_scripts"中,並使用其"matches"屬性,就像編寫"permissions" URL一樣。 然后使用其"exclude_matches""exclude_globs""include_globs"屬性(其中“ globs”是您要包括或排除的URL片段)來優化內容腳本匹配 所以:

  "content_scripts": [
    {
      "matches": [
        "http://www.google.com/bbb/*"
      ],
      "js": [
        "src/inject/your_scripts.js"
      ],
      "css": [
        "src/inject/your_styles.css"
      ],
      "run_at": "document_end"
    }
  ],

請記住,要實現您的示例,您將需要"run_at": "document_end"以便在DOM完成之后,但在加載諸如圖像和框架之類的子資源之前(根​​據上面的鏈接)立即注入文件。 希望這對某人有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM