如何在Chrome扩展程序中将同一域与多个扩展名匹配?

时间:2018-08-28 12:34:36

标签: google-chrome google-chrome-extension content-script

因此,我正在开发一个Chrome扩展程序,该扩展程序需要在域为example.extension的任何站点上激活,其中extension可以是任何内容(.com.de等)。

我有一个内容脚本,在manifest.json中,我列出了一个接一个列出的所有域名:

"content_scripts": [{
    "js": ["content.js"],
    "matches": ["https://www.example.com/*","https://www.example.de/*"]
  }]

但是我怎么写匹配example.*的东西而不是列举所有的东西呢? 请注意,我尝试过类似的操作,但它不起作用:

 "content_scripts": [{
    "js": ["content.js"],
    "matches": ["https://www.example*"]
  }]

2 个答案:

答案 0 :(得分:1)

您可以使用持久性后台脚本,并在URL符合您的要求时注入脚本。例如:

background.js

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
    if (changeInfo.status == 'complete' && tab.url.indexOf('https://www.example.') == 0){
        chrome.tabs.executeScript(tabId,{file:'content.js'});
    }
});

答案 1 :(得分:1)

这些是2个选项:

第一个选项: 您可以使用清单中的include_globs,如图here

所示
    "content_scripts": [{
           "js": ["content.js"],
            "matches": [ "*://*/*" ],
            "include_globs": [
                "*://*.example.*/*",
            ]
        }]

第二个选项::您可以更改内容脚本,以检查目标URL是否与www.example.*相匹配:

if (window.location.host.startsWith('www.example')){
   //content script code
}