0

マニフェストに次のようなものを含める方法を理解しています:

"exclude_matches" : ["*://somesite.somewhere.com/*"],

しかし、これは多くの URL では役に立たないようです。

外部ファイルをチェックして URL またはパターンが存在するかどうかを確認する方法はありますか?

URL またはパターンが存在する場合に通知を表示して、拡張機能が利用できないことをユーザーに思い出させることはできますか?

4

2 に答える 2

1

「exclude_matches」属性を外部ファイルにバインドすることはできません。

URL やパターンを含むファイルをチェックする必要がある場合は、Programmatic Injectionを使用することをお勧めします。

  1. chrome.tabs.onUpdated.addListener()など、適切なリスナーをバックグラウンド ページ (またはより適切なイベント ページ) に登録します。

  2. タブの場所が更新されたら、バックグラウンド ページまたはイベント ページで URL/パターンを含むバンドルされた js ファイルをチェックし、コンテンツ スクリプトを挿入するかどうかを決定します。

  3. 最後に、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
        }
    }
};
于 2013-10-13T18:49:44.933 に答える