拡張機能と同じである場合と異なる場合があるパッケージアプリのドキュメントによると、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 が既にページに挿入されている場合は、競合が発生する可能性があることに注意してください。