4

ユーザーにポップアップボタンをクリックさせることなく、ユーザーがいるタブの現在のURLを取得できるようにしたいと考えています。ユーザーがポップアップアイコンをクリックすると、すべてが想定どおりに機能するスクリプトを取得しましたが、現在の目標を達成しようとする (ボタンを押さずに実行する) ために、コードをコピーして貼り付けました背景ページで、結果が得られませんでした。私の推測では、アクティブなリスナーか、それに沿った何かが必​​要だったのです。

これは、ポップアップボタンを操作するために取得したjavascriptです

<script type="text/javascript" src="http://code.jquery.com/jquery-1.8.1.min.js"></script>
<script>
window.addEventListener("load", windowLoaded, false);
function windowLoaded() {
  chrome.tabs.getSelected(null, function(tab) {
        //doing stuff with the url
  });
}
</script>
4

3 に答える 3

5

拡張機能と同じである場合と異なる場合があるパッケージアプリのドキュメントによると、chrome.app API の onLaunched イベントを使用して、アプリの起動時にコードを実行します。

// start doing something when the app first loads....
chrome.app.runtime.onLaunched.addListener(function() {
    // all your monitoring code will go here

});

拡張機能を構築し、ブラウザが読み込まれるとすぐに拡張機能がリッスンを開始する必要がある場合は、「onLaunched」リスナーを宣言する必要がない場合があることに注意してください。

さらに、現在アクティブなタブでユーザーが使用している URL を常に知りたい場合は、アクティブなタブへの変更を監視する必要があります。Chrome Tabs APIには、拡張機能からタブを操作するのに役立つ多くの情報が含まれています。たとえば、アクティブなタブへの変更を監視するコードは次のとおりです。

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
    console.info("This is the url of the tab = " + changeInfo.url);
    // do stuff with that url here....
});

ユーザーがアクティブなタブで URL を変更すると、このハンドラーはその変更を監視します。

chrome.tabs.onActivated.addListener(function(activeInfo) { .. }

ただし、 onActivated のドキュメントには次のように記載されています。

ウィンドウ内のアクティブなタブが変更されたときに発生します。このイベントが発生した時点でタブの URL が設定されていない可能性がありますが、onUpdated イベントをリッスンして、URL が設定されたときに通知されることに注意してください。

したがって、おそらく onUpdated イベントの例をそのまま使用することになります。

バックグラウンド ページで、JavaScript を挿入したいページに到達したとき。たとえば、JavaScript を使用してページの背景色を変更するには、次のコードを使用します。

chrome.tabs.executeScript(null,
                           {code:"document.body.bgColor='red'"});

バックグラウンド ページでは、JavaScript を直接実行したり、Web ページの DOM を操作したりできないことに注意してください。したがって、この方法でコードを挿入する必要があります。これには、必要な jQuery やその他のリソースなどの挿入が含まれます。

manifest.json でタブのアクセス許可と背景ページを許可することを忘れないでください。

/* in manifest.json */
"permissions": [
  "tabs", "http://*/*"
],
"background": {
  "scripts": ["background.js"]
},

jQuery をページに挿入するには、基本的にスクリプト要素を作成するコードを記述し、それをページに挿入します。

chrome.tabs.executeScript(null,
    {code:
        "var script = document.createElement('script');" +
        "script.setAttribute('src', '//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js');" +
        "script.setAttribute('type','text/javascript');" +
        "document.getElementsByTagName('head')[0].appendChild(script);"

   }
);

二重引用符で囲まれたコードは、バックグラウンド ページでは実行されません。代わりに、タブ内のページに挿入されたときに実行されます。二重引用符内のコンテンツには単一引用符を使用して、パーサーが混乱して文字列リテラル エラーをスローしないようにします。

このようなコードをページに挿入するための、より適切でクリーンな方法があるかもしれませんが、小規模でマイナーな挿入の場合は、これで十分であることに注意してください。

jQuery が既にページに挿入されている場合は、競合が発生する可能性があることに注意してください。

于 2012-10-14T22:07:28.577 に答える
3

別のアプローチ: コンテンツ スクリプトから取得し、バックグラウンド ページに送信します。

url = window.location.href;

    chrome.runtime.sendMessage({greeting: url}, function(response) {
    });

background.js で

chrome.runtime.onMessage.addListener(function(message,sender,sendResponse){
        var url=message.greeting;
}
于 2015-05-11T14:24:56.687 に答える
-3

Chrome 拡張機能では、バックグラウンドで実行されているファイルが必要になる可能性があります。というページの作成に関するこの開発者の記事を確認してください。background.js

これにより、拡張機能が有効になっている間も保持されるコードをファイルに配置できます。

于 2012-10-14T21:52:41.987 に答える