Chrome拡張開発入門の次に読む記事…?
注:未完結の記事です。「これはどうやって実装するの!?」というリクエスト、お待ちしています。
この記事では、主に、「Chrome拡張開発してみたい!とりあえずHelloWorldはできたよ!でも、こういう動作をさせる方法がわからない!!」という方を対象にしています。
※HelloWorldまでの習得は、こちらのサイトが大変わかりやすいと思います。
ほかのサイトで詳しく解説されていることに関しては、そのサイトに丸投げしてしまっています。すみません…。
分からない関数等がありましたら、こちらで調べてみてください。
もくじ
1.選択したテキストを取得する。
window.getSelection().toString();
を実行しても、返ってくるのは「ポップアップ内での選択部分」で、表示しているページの選択部分は返ってきません。
ここで、メッセージというものを使用します。
具体的なコード例です。
background.html
var callbacks = []; function getSelection(callback) { chrome.tabs.getSelected(null, function(activeTab) { if (activeTab.url.indexOf('https://') >= 0) { callback(null); } else { callbacks.push(callback); chrome.tabs.executeScript(null, { file: "content_script.js" }); } }); }; chrome.extension.onRequest.addListener(function(request) { var callback = callbacks.shift(); callback(request); });
content_script.js
chrome.extension.sendRequest({ "text": window.getSelection().toString() });
popup.html
var bg = chrome.extension.getBackgroundPage(); bg.getSelection(function(selection) { // selection.text に選択部分が入っているので、それを使ってゴニョゴニョ…(ノ゚д゚(; ̄Д ̄)ゴニョゴニョ…(ノ゚д゚(; ̄Д ̄)する });
ソースコードの説明
1.[background.html]getSelectionが呼び出されたとき、現在表示しているタブの情報を取得し、保護されているページかどうかを判断。*1
2.[background.html]保護されていなければ、content_script.jsを、表示しているタブに注入。
3.[content_script.js]ウィンドウの選択部分を取得し、background.htmlに送る。
4.[background.html]getSelectionの引数のコールバック関数に、content_script.jsから送られてきたデータを渡す。
5.送られてきたデータをごにょごにょする。
以上が選択部分を取得する基本的な流れです。
popup.htmlは何をしてるんだ!!という意見があると思います。そういう方はこちらをどうぞ。
*1:保護されているページの場合、そのあとのexecuteScriptが使用できないため。