各種類のページ/スクリプトの目的をより明確にすることから始めます。
まず、background page/script
です。background script
拡張機能が存在する場所です。必須ではありませんが、ほとんどの拡張機能を実行するために必要です。その中で、やりたいことに応じて、さまざまなイベントリスナーなどを設定できます。独自の小さな世界に存在し、API を使用して他のページやスクリプトとのみ対話できますchrome.*
。イベント ページとして設定した場合、使用されていないときにアンロードされ、何かを行うときにメモリにロードされることを除いて、まったく同じように機能します。
Content scripts
注入された Javascript および/または CSS を参照してください。これらは、Web ページとの対話に使用される主要なツールです。API へのアクセスは非常に制限されてchrome.*
いますが、注入先のページの DOM には完全にアクセスできます。すぐにそれらの使用に戻ります。
今すぐPopup pages
。と とは異なりbackground script
、content script
ポップアップには と の両方の部分がHTML
あります。JS
パーツは他のHTML
ページと同じように小さく、アイコンからオーバーレイ ポップアップとして表示されます。ただし、そのスクリプト部分は、ポップアップが閉じられるたびにアンロードされることを除いて、バックグラウンド ページが行うすべてのことを行うことができます。
違いがより明確になったので、やりたいことに移りましょう。ポップアップを開いて、現在のタブで検索するテキストをユーザーに入力させ、ページ上のそのテキストを強調表示したいようです。テキストをどのようにハイライトするかはすでにわかっているとおっしゃっていたので、その部分はお任せします。
最初にマニフェスト ファイルを設定します。この特定のアクションでは、バックグラウンド スクリプトは必要ありません。必要なのは、"tabs"
と"activeTab"
パーミッションの両方です。これらにより、後でスクリプトを挿入できます。また、ポップアップでブラウザ アクションを定義する必要があります。全体として、次のようになります。
"browser_action": {
"default_icon": "icon.png",
"default_popup": "popup.html"
},
"permissions": [
"tabs", "activeTab"
]
このpopup.html
ファイルでは、マークアップと css のみを使用でき、インライン コードはまったく使用できません。すべてをjs
ファイルに入れて含めます。このようなものが動作するはずです:
<!DOCTYPE html>
<html>
<head>
<script src="popup.js"></script>
</head>
<body>
<input type="text" id="searchText">
<button id="searchButton">Search</button>
</body>
</html>
ここで、コンテンツ スクリプトの話に戻ります。コンテンツ スクリプトを挿入するには 2 つの方法があります。1 つ目は、マニフェストで定義する方法です。これは、特定の URL のセットに対して常に注入したい場合に最適です。次に、chrome.tabs.executeScript
必要なときにメソッドを使用して注入します。それが私たちが使うものです。
window.onload = function(){
document.getElementById('searchButton').onclick = searchText;
};
function searchText(){
var search = document.getElementById('searchText').value;
if(search){
chrome.tabs.query({active:true,currentWindow:true},function(tabs){
chrome.tabs.executeScript(tabs[0].id,{file:search.js});
chrome.tabs.sendMessage(tabs[0].id,{method:'search',searchText:search});
});
}
}
これで、スクリプトの挿入に成功し、検索テキストをそのスクリプトに送信しました。スクリプトが次のonMessage
ようにリスナーにラップされていることを確認してください。
chrome.runtime.onMessage.addListener(function(message,sender,sendResponse){
// message.searchText is the text that was captured in the popup
// Search/Highlight code goes here
});
そして、それはほとんどそれを要約しています。これで、それを機能させることができるはずです。それでも不明な点がある場合はお知らせください。修正します。