Chrome拡張機能を使って、現在閲覧中のページのメタ情報を確認できる簡易的なデバッグ機能を作成中です。
・現在のページ内容を取得
・配列に格納しメッセージ送信
・受信したデータを拡張機能のポップアップに出力
という基本動作までは完成したのですが、ページを開くたびに情報を取得するのは不要なので、
拡張機能のメッセージのやり取りのタイミングを改良したいと思います。
①拡張機能のポップアップ(popup.html)の要素イベントをクリック
②イベントを「contents_script.js」(現在のタブで見ているページの操作用)へ伝達
③クリックイベントを確認してページ情報を取得し、送信
④送られた情報を「background.js」で受信し、ポップアップ(popup.html)へ反映
この際に②の「background.js」→「contents_script.js」へのメッセージ送信がうまくいきません。
「contents_script.js」→「background.js」への送信のみしかできないのでしょうか?
お互いのページのメッセージ(データ)の相互受信のやりかたなどご教授お願い致します。
●background.js(拡張機能のポップアップから操作)
var data = Array(); //「script.js」からメッセージ受信 chrome.extension.onMessage.addListener( function(request, sender, sendResponse){ console.log(request); //取得情報を「popup.html」に出力 $("textarea[name='title']").attr({'value': request.arr[0]}); //以下処理は省略 sendResponse({message: "完了"}); } );
●contents_script.js(現在のタブで見ているページの操作用)
//配列内に取得したいオブジェクトを指定 var itemList = ['title','meta[name=description]','meta[name=keywords]', 'h1']; //指定オブジェクトの取得ソース格納用配列を準備 var sorceList = new Array(); $.each(itemList, function(i){ //配列内に"meta"が含まれない場合は要素のhtmlソースを取得 if(itemList[i].indexOf("meta") == -1){ $sorce = $(itemList[i]).html(); }else{ //配列内に"meta"が含まれる場合は"content"属性からソースを取得 $sorce = $(itemList[i]).attr('content'); } //取得ソースを配列に格納 sorceList.push($sorce); }); //「background.js」へ取得情報を送信 chrome.runtime.sendMessage({ arr: sorceList}, function(response){ console.debug(response.message); } );
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。