マニフェストに次のようなものを含める方法を理解しています:
"exclude_matches" : ["*://somesite.somewhere.com/*"],
しかし、これは多くの URL では役に立たないようです。
外部ファイルをチェックして URL またはパターンが存在するかどうかを確認する方法はありますか?
URL またはパターンが存在する場合に通知を表示して、拡張機能が利用できないことをユーザーに思い出させることはできますか?
マニフェストに次のようなものを含める方法を理解しています:
"exclude_matches" : ["*://somesite.somewhere.com/*"],
しかし、これは多くの URL では役に立たないようです。
外部ファイルをチェックして URL またはパターンが存在するかどうかを確認する方法はありますか?
URL またはパターンが存在する場合に通知を表示して、拡張機能が利用できないことをユーザーに思い出させることはできますか?
「exclude_matches」属性を外部ファイルにバインドすることはできません。
URL やパターンを含むファイルをチェックする必要がある場合は、Programmatic Injectionを使用することをお勧めします。
chrome.tabs.onUpdated.addListener()など、適切なリスナーをバックグラウンド ページ (またはより適切なイベント ページ) に登録します。
タブの場所が更新されたら、バックグラウンド ページまたはイベント ページで URL/パターンを含むバンドルされた js ファイルをチェックし、コンテンツ スクリプトを挿入するかどうかを決定します。
最後に、chrome.tabs.executeScript()を使用して、スクリプトを Web ページに挿入します (必要な場合)。
リクエストに応じて、開始するためのテストされていないコードがいくつかあります。
manifest.jsonで:
...
// 1. Ask permission to listen for changes in tabs
// 2. Ask permission to "interfere" with any web-page
// (using the "http" or "https" schemes - modify appropriately for other schemes)
"permissions": {
...
"tabs",
"http://*/*",
"https://*/*"
},
...
// Include the file with the URLs and/or patterns to check
// in your background- or event-page.
"background": {
"persistent": false, // <-- Recommended, but optional
"scripts": [
"background.js",
"lotsOfURLsAndOrPatterns.js"
]
},
...
lotOfURLsAndOrPatterns.jsで:
...
// E.g.:
var excludedURLsArray = [
"<1st url...>",
"<2nd url...>",
...
];
...
background.jsで:
// Add a listener for the "onUpdated" event
chrome.tabs.onUpdated.addListener(function(tabId, info, tab) {
if (info.url) {
// The URL has changed - you can device other methods for checking
// if you need to inject the tab, according to your particular setup
for (var i = 0; i < excludedURLsArray.length; i++) {
// Look for an exact match with an excluded URL
// (modify according to your needs - e.g. check host only, etc)
if (info.url == excludedURLsArray[i]) {
// No injection - inform user and return
alert("Extension not available on '" + info.url + "'.\n"
+ "You are on your own !");
return;
}
}
// Ending up here means we must inject...
chrome.tabs.executeScript(tabId, {
"file": "myContentScript.js",
"allFrames": false // <-- or whatever suits you
}
}
};