71

一般的な質問

こんにちは!私は Chrome 拡張機能の世界を掘り下げていて、全体的なワークフローを理解するのにいくつか問題があります。Google は最近、すべてを background.js と background.html に保持するのではなく、強く支持するイベント ページに切り替えたようです。これは、拡張ロジックのほとんどをコンテンツ スクリプトに渡す必要があることを意味します。

Google のイベント ページ入門では、コンテンツ スクリプトが manifest.json ファイルにリストされています。しかし、彼らのイベント ページの例の拡張機能では、background.js の次のコード ブロックを介して取り込まれます。chrome.tabs.executeScript(tab.id, {file: "content.js"}, function() { });

ある方法で行うことの利点は何ですか?

マイコード

Google の例のように、コンテンツ スクリプトを挿入するプログラム的な方法を進めています。

マニフェスト.json

{
    "manifest_version": 2,
    "name": "Test",
    "description": "Let's get this sucker working",
    "version": "0.0.0.1",
    "permissions": [
        "tabs",
        "*://*/*"
    ],
    "background": {
        "scripts": ["background.js"],
        "persistent": false
    },
    "browser_action": {
        "default_icon": "icon.png"
    }
}

background.js

chrome.browserAction.onClicked.addListener(function() {
    console.log("alert from background.js");
    chrome.tabs.executeScript({file: "jquery-2.0.2.min.js"}, function() {
        console.log("jquery Loaded");
    });
    chrome.tabs.executeScript({file: "content.js"}, function() {
        console.log("content loaded");
    });
});

content.js

console.log('you\'r in the world of content.js');
var ans = {};

ans.createSidebar = function() {

    return {
        init: function(){
            alert("why hello there");
        }
    }
}();

ans.createSidebar.init();

console.logバックグラウンド ページのデバッガーに表示される最初の 3 つのステートメントを取得できます。content.js からアラートを取得して、任意の Web サイトに表示することもできます。しかし、私はconsole.logcontent.js から を表示することも、content.js から JS を表示することもできません。バックグラウンド ページ デバッガーの [ソース] タブの [コンテンツ スクリプト] セクションを調べてみました。SOに関する他のいくつかの投稿では、それを表示するためにステートメントを追加することを提案してdebugger;いますが、私は何も運がありません. 私が見た中で最も近い解決策はこの投稿ですが、マニフェストにコンテンツスクリプトをリストすることによって行われます。

どんな助けでも大歓迎です。ありがとう!

4

2 に答える 2

93

コンテンツ スクリプトの console.log メッセージは、バックグラウンド ページのインスペクターではなく、Web ページのコンソールに表示されます。

debugger;開発者ツール (コンテンツ スクリプトが挿入される Web ページ用) が開かれている場合、追加は機能します。

したがって、この場合、ブラウザー アクション アイコンをクリックする前に (Web ページの) 開発者ツールをアクティブにする必要があります。

于 2013-06-15T05:44:14.370 に答える