###エラー内容
error
1Unchecked runtime.lastError: Could not establish connection. Receiving end does not exist.
popup側でsendMessageしてcontentscripts側でメッセージを受け取りたいのですが、sendMessageのタイミングで上記のエラーが出ます。
###コード
javascript
1(content.js) 2 3chrome.runtime.onMessage.addListener(function (message, sender, sendResponse) { 4 const jsInitCheckTimer = setInterval(jsLoaded, 1000) 5 6 // 表示されているツイートの本文部分の要素を取得 7 let articles = document.querySelectorAll('div[lang] > span') 8 9 if (articles.length > 0) { 10 Array.prototype.forEach.call(articles, async (article) => { 11 if (!article.innerText.includes(message.text)) { 12 let tweet = article.closest('article') 13 let range = tweet.parentNode 14 range.style.display = 'none' 15 } 16 }) 17 } 18 return true 19})
vue
1(App.vue) 2 3<template> 4 <div> 5 <h3>検索ワード</h3> 6 <input type="text" v-model="text" placeholder="入力"> 7 <h3>日付</h3> 8 <h4>次の日付以降</h4> 9 <input type="text" v-model="since" placeholder="20**/**/**"> 10 <h4>次の日付以前</h4> 11 <input type="text" v-model="until" placeholder="20**/**/**"> 12 <div> 13 <button v-on:click="search">検索</button> 14 </div> 15 </div> 16</template> 17 18<script> 19export default { 20 name: 'App', 21 data: function () { 22 return { 23 text: '', 24 since: '', 25 until: '' 26 } 27 }, 28 methods: { 29 search: function () { 30 31 // 入力情報を配列に代入 32 const inputData = [this.text, this.since, this.until] 33 34 // ページのロードが完了したらmessageSendを実行 35 function waitPageLoad (callback, inputData) { 36 37 // 取得するタブの条件 38 const queryInfo = { 39 active: true, 40 currentWindow: true 41 } 42 43 chrome.tabs.query(queryInfo, function (tabs) { 44 const currentTab = tabs[0] 45 46 if (currentTab.status === 'complete') { 47 ///messageSend実行 48 callback(currentTab, inputData) 49 } else { 50 ///再度WaitPageLoad実行 51 setTimeout(() => { 52 waitPageLoad(callback, inputData) 53 }, 50) 54 } 55 }) 56 } 57 58 // メッセージ送信(callbackで呼び出している関数) 59 function messageSend (Tab, inputData) { 60 ///ここでエラーが発生する 61 chrome.tabs.sendMessage( 62 Tab.id, 63 { text: inputData[0], since: inputData[1], until: inputData[2] }, 64 () => {} 65 ) 66 } 67 68 waitPageLoad(messageSend, inputData) 69 } 70 } 71} 72</script> 73 74<style> 75 html { 76 width: 400px; 77 height: 400px; 78} 79</style> 80
json
1(manifest.json) 2 3{ 4 "manifest_version": 2, 5 "name": "__MSG_extName__", 6 "homepage_url": "http://localhost:8080/", 7 "description": "a extention for Google Chrome", 8 "default_locale": "en", 9 "permissions": [ 10 "<all_urls>", 11 "*://*/*", 12 "storage", 13 "tabs" 14 ], 15 "icons": { 16 "16": "icons/16.png", 17 "48": "icons/48.png", 18 "128": "icons/128.png" 19 }, 20 "background": { 21 "scripts": [ 22 "js/background.js" 23 ], 24 "persistent": false 25 }, 26 "content_scripts": [{ 27 "matches": ["*://*.twitter.com/*"], 28 "js": [ 29 "content/content.js" 30 ], 31 "run_at": "document_end", 32 "all_frames": true 33 }], 34 "browser_action": { 35 "default_popup": "popup.html", 36 "default_title": "__MSG_extName__", 37 "default_icon": { 38 "19": "icons/19.png", 39 "38": "icons/38.png" 40 } 41 } 42} 43
###試したこと
他の拡張機能をオフにする
→改善せず
これを参考にタブのステータスが'complete'になってからsendMessageを実行するよう書き換え
→改善せず
(読み込んでいるタブがtwitterで、twitterはツイートを非同期で取得しているのですが、もしかしてそれが関係していたりするのでしょうか…?)
return trueを記述、拡張機能を更新
→改善せず
何かアドバイス等ありましたら教えていただけると幸いです。よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。