web-dev-qa-db-ja.com

chrome.tabs.executeScript:chrome:// URLにアクセスできません

chrome拡張機能の開発は初めてです。

問題はchrome:// URLにアクセスすることではありません。そこでは何も編集したくありませんが、問題はスクリプトの挿入に使用されるchrome.tabs.executeScript()の実行に関するものです。

chrome .tabs.executeScriptを使用してバックグラウンドスクリプトを実行しようとしていますが、次のエラーが発生します。


Tabs.executeScriptの実行中のunchecked runtime.lastError:chrome:// URLにアクセスできません

私は次のコードを持っています:

マニフェスト

{
    "name": "BrowserExtension",
    "version": "0.0.1",
    "manifest_version": 2,
    "description" : "Description ...",
    "icons": { "16": "icons/16x16.png", "48": "icons/48x48.png", "128": "icons/128x128.png" },
    "background" : {
        "scripts": ["background.js"]
    },      
    "permissions": [
        "tabs",
        "background",
        "http://*/*",
        "https://*/*"
    ],
    "browser_action": {
        "default_icon": {
            "19": "icons/19x19.png",
            "38": "icons/38x38.png"
        },
        "default_title": "That's the tool tip"
    }   
}

Background.js

console.log("background.js : click()");
chrome.tabs.executeScript(null, {file: "jquery.min.js"}, function(){
    chrome.tabs.executeScript(null, {file: "auto.js"}, function(){
        chrome.tabs.executeScript(null, {file: "script.js"}, function(){
            //all injected
        });
    });
});

script.js

$(function()
{
    var input = $('input');
    $.each(input,function(index,element){
        var area = new AutoSuggestControl(element.id);
    });    

    var ta = $('textarea');
    $.each(ta,function(index,element){ var area = new AutoSuggestControl(element.id);});

    return 1;
});

auto.jsはプリコンパイルされたjsファイルで、htmlファイルで単独で使用すると完全に正常に動作します。拡張機能の目的は、テキストフィールドへの書き込み中にオートコンプリートを提供することです。助けてくれてありがとう。

19
slayer

セキュリティ上の理由から、chrome:// URLはブロックされています。 Googleは、ユーザーが知らないうちに外観を変更したり、chrome設定を変更したりすることを望んでいません。拡張機能をロードすると、chrome:// extensionsページ内のファイルがすぐに実行されます。ユーザーが移動するすべてのタブでスクリプトを実行したい場合は、次を使用する必要があります。

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
    //code in here will run every time a user goes onto a new tab, so you can insert your scripts into every new tab
}); 
17
Marc Guiselin