7

バックグラウンドスクリプトのappコンテンツスクリプトから変数にアクセスするにはどうすればよいですか?app.jsbackground.js

これが私がそれを試す方法です(background.js):

chrome.tabs.executeScript(null, { file: "app.js" }, function() {
   app.getSettings('authorizeInProgress'); //...
});

これが私が得るものです: tabs.executeScript中のエラー:URLのコンテンツにアクセスできません

ここにありmanifest.jsonます:

{
  "name": "ctrl-vk",
  "version": "0.1.3",
  "manifest_version": 2,
  "description": "Chrome extension for ctrl+v insertion of images to vk.com",

  "content_scripts": [{
    "matches": [
        "http://*/*",
        "https://*/*"
    ],
    "js": ["jquery-1.9.1.min.js"
    ],
    "run_at": "document_end"
  }],

  "web_accessible_resources": [
    "jquery-1.9.1.min.js"
  ],

  "permissions" : [
    "tabs",
    "http://*/*",
    "https://*/*"
  ],

  "background": {
    "persistent": false,
    "scripts": ["background.js"]
  }
}

たとえば、githubの完全なコード

https://github.com/MaxLord/ctrl-vk/tree/with_bug

4

3 に答える 3

2

上記のエラーを回避するには、次のコードを使用します

if (tab.url.indexOf("chrome-devtools://") == -1) {
    chrome.tabs.executeScript(tabId, {
        file: "app.js"
    }, function () {

        if (app.getSettings('authorizeInProgress')) {
            alert('my tab');
            REDIRECT_URI = app.getSettings('REDIRECT_URI');
            if (tab.url.indexOf(REDIRECT_URI + "#access_token") >= 0) {
                app.setSettings('authorize_in_progress', false);
                chrome.tabs.remove(tabId);
                return app.finishAuthorize(tab.url);
            }
        } else {
            alert('not my');
        }

    });
}

それ以外の

chrome.tabs.executeScript(null, {
    file: "app.js"
}, function () {

    if (app.getSettings('authorizeInProgress')) {
        alert('my tab');
        REDIRECT_URI = app.getSettings('REDIRECT_URI');
        if (tab.url.indexOf(REDIRECT_URI + "#access_token") >= 0) {
            app.setSettings('authorize_in_progress', false);
            chrome.tabs.remove(tabId);
            return app.finishAuthorize(tab.url);
        }
    } else {
        alert('not my');
    }

});

説明

  • chrome://extensions/pageもchrome.tabs.onUpdatedイベントを発生させます。これを回避するには、すべてのdev-toolページをスキップするフィルターを追加する必要があります。
于 2013-02-17T17:40:34.720 に答える
1

(これを受け入れられた回答へのコメントとして提出しましたが、それでも必要な評判が不足しています)

また、tabIdがある場合は、最初の引数としてchrome.tabs.executeScriptに指定する必要があります。そうしないと、間違ったページに対してexecuteScriptを実行するURLとbackground.jsを要求した直後に、ユーザーがウィンドウ/タブを切り替えるリスクがあります。

後から考えるとかなり明白ですが、chrome.tabs.onUpdatedイベントハンドラーがページユーザーが要求したことをチェックしていたにもかかわらず、同じエラーメッセージ「URL "chrome-devtools://.."のコンテンツにアクセスできません」を受け取ったときにループが発生しましたexecuteScript呼び出しを行う直前に特定のドメイン名がありました。

したがって、アクティブウィンドウが開発者ツールのインスペクターである場合でも、chrome.tabs.executeScript(null、..)はアクティブウィンドウでスクリプトを実行することに注意してください。

于 2014-11-25T20:19:00.480 に答える
0

マニフェストコフィグでは、次のことに注意する必要があります:</ p>

"content_scripts": [{
"matches": [
    "http://*/*",
    "https://*/*"
],
"js": ["jquery-1.9.1.min.js"
],

「一致」の部分では、http、httpsのみが一致するため、「chrome:// extendeds /」、「file:/// D:xxx」のようなページに拡張機能を読み込むと、そのエラーが発生します。

URL「http://」を使用してページに拡張機能をロードできます。または、'matches'配列にルールを追加します。

于 2013-07-26T09:13:12.337 に答える