chrome.tabs.sendMessageの返り値がundefinedになる
chromeで以下の処理を行うアドオンを作成しようとしています。
- popup.htmlにあるテキストエリアに文字列を入力(改行区切りで複数入力可)し、送信ボタンを押下
- popup.jsでボタン押下をキャッチし、フォームに入力された値を配列にしてcontent.jsに渡す
- content.jsでアクティブタブ内にあるテーブルの3列目を検索し、入力された文字列を一致するものを探す
- 検索終了後、結果をアラートで表示
各ファイルのコードは以下の通りです。
manifest.json
{ "name": "test", "version": "0.0.2", "manifest_version": 2, "description": "test", "icons": { "16": "img/icon_16.png" }, "browser_action": { "default_icon": "img/icon_16.png", "default_title": "test", "default_popup" : "popup.html" }, "content_scripts": [ { "matches": ["https://*/*"], "js": ["js/jquery-2.1.1.min.js", "js/content.js"], "run_at": "document_end" } ], "permissions": [ "tabs" ] }
popup.js
$(document).ready(function() { chrome.tabs.query({active:true}, function(tab) { $('#do_action').click(function(e) { e.preventDefault(); var list = ""; list = $("[name='list']").val(); if(list == ""){ alert("文字をテキストエリアに入れてください。"); return false; } var list_array = list.split("\n"); chrome.tabs.sendMessage(tab[0].id, {list: list_array}, function(response){ alert(response.result); }); }); }); });
content.js
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) { var hit_datas = []; var send_mes = ""; $.each(request.list, function() { var search_value = this; $('tr').each(function(){ if($('td',this).eq(2).text() == search_value){ hit_datas.push(search_value + "が見つかりました。"); } } }); }); if(hit_datas.length != 0){ send_mes = hit_datas.join("\n"); }else{ send_mes = "一致する情報は有りませんでした。"; } sendResponse({result: send_mes}); });
popup.htmlにはdo_actionというidを振ったボタンと、listという名前を付けたテキストエリア、そしてpopup.jsを読み込む記述が書いてあります。
上記の内容で実行すると、popup.jsの『alert(response.result);』の部分で
extensions::uncaught_exception_handler:8 Error in event handler for (unknown): TypeError: Cannot read property 'result' of undefined
というエラーが発生してしまいます。
色々調べてみたのですが、自力で解決できませんでした。
どうかよろしくお願いいたします。