- popup.html を表示するときに、background.js でAPIをコールする
- 結果をpopup.js に表示する
ということを sendMessage
-> $.ajax
->sendResponse
-> render
という流れでやろうとしているのですが、うまくゆきません。
render
にやってくる値が undefinded
になってしまいます。
JavaScriptじたいの経験が浅いゆえ、Chrome拡張の開発特有の何かというより、
JavaScriptの非同期の基礎的な取扱いでつまづいている気がします。
なにとぞよろしくお願いします。
├── asset │ └── jquery-3.2.1.min.js ├── background.js ├── manifest.json ├── popup.css ├── popup.html └── popup.js
manifest.json
{ "browser_action": { "default_popup": "popup.html" }, "permissions": ["http://*/*", "https://*/*"], "background": {"scripts": ["asset/jquery-3.2.1.min.js", "background.js"]}, "manifest_version": 2, "name": "b", "version": "0.1" }
popup.html
<script src="asset/jquery-3.2.1.min.js"></script> <link href="popup.css" rel="stylesheet"> <script src=popup.js></script>
popup.js
window.addEventListener("load", function() { chrome.runtime.sendMessage({cmd: "call_api"}, render) return false }) function render(res) { console.log(res) // sendAだけ有効, sendB, sendCはだめ }
background.js
var sending_data = {token: ""} chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) { if (request.cmd == "call_api") { // sendResponse({data:"hello?"}) // sendA $.ajax( { url: 'https://api.example.com/list', type: 'post', contentType:'application/json', data: JSON.stringify(sending_data), 'crossDomain': true, success: function (res) { console.log(res) // ちゃんとデータが入っている(API叩けてる) // sendResponse({data:"hello?"}) // これがうまく呼べない // sendResponse({data: JSON.stringify(res) }) // 本当にやろうとしていること sendC }, error: console.log, }); } });
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/08/08 23:05
2017/08/08 23:23