###前提・実現したいこと
WebExtensionsでyoutubeの動画を新しいウインドウで開くアドオンを作っています。
なぜか最初にインストールした時だけbrowser.tabs.sendMessageがエラーを出します。ブラウザーを再起動すると直ります。これはバグなんでしょうかそれとも僕の書き方が悪いんでしょうか。
###発生している問題・エラーメッセージ
Error: Error: Could not establish connection. Receiving end does not exist. YouTube-background.js:2:3 onError moz-extension://31a62720-6f34-4d04-9287-0b9c07dc7cf3/YouTube-background.js:2:3 (非同期: promise callback) newWindow/< moz-extension://31a62720-6f34-4d04-9287-0b9c07dc7cf3/YouTube-background.js:10:5 (非同期: promise callback) newWindow moz-extension://31a62720-6f34-4d04-9287-0b9c07dc7cf3/YouTube-background.js:8:3 onGot/</< moz-extension://31a62720-6f34-4d04-9287-0b9c07dc7cf3/YouTube-background.js:39:9 (非同期: promise callback) onGot/< moz-extension://31a62720-6f34-4d04-9287-0b9c07dc7cf3/YouTube-background.js:38:7 (非同期: promise callback) onGot moz-extension://31a62720-6f34-4d04-9287-0b9c07dc7cf3/YouTube-background.js:25:5 (非同期: promise callback) getInfoForTab moz-extension://31a62720-6f34-4d04-9287-0b9c07dc7cf3/YouTube-background.js:48:5 (非同期: promise callback) <匿名関数> moz-extension://31a62720-6f34-4d04-9287-0b9c07dc7cf3/YouTube-background.js:54:3
###該当のソースコード
manifest.json
json
1{ 2 "manifest_version": 2, 3 "name": "YouTube Popup Panel", 4 "version": "1.2", 5 "applications": { 6 "gecko": { 7 "id": "YouTube-Popup-Panel@nekojiro.net" 8 } 9 }, 10 "description": "__MSG_extensionDescription__", 11 "default_locale": "en", 12 "background": { 13 "scripts": ["YouTube-background.js"] 14 }, 15 "page_action": { 16 "default_icon": "icons/page-32.png", 17 "default_title": "Popup" 18 }, 19 "icons": { 20 "48": "icons/page-48.png", 21 "64": "icon/page-64.png" 22 }, 23 "permissions": [ 24 "storage", 25 "tabs" 26 ], 27 "options_ui": { 28 "page": "options/options.html" 29 } 30}
background
javascript
1function onError(error) { 2 console.error(`Error: ${error}`); 3} 4 5function newWindow(YouTubeURL) { 6 const videoID = YouTubeURL.slice(32); 7 const querying = browser.tabs.query({currentWindow: true, active: true}); 8 querying.then((tabs) => { 9 console.log(tabs[0].id); 10 browser.tabs.sendMessage(tabs[0].id, {URL: videoID}).catch(onError); 11 }); 12 /* browser.windows.onCreated.addListener(() => { 13 }); 14 browser.windows.onCreated.removeListener(newWindow); */ 15} 16 17function onGot(tabInfo) { 18 const YouTubewatchURL = 'https://www.youtube.com/watch'; 19 if (tabInfo.url.match(YouTubewatchURL)) { 20 let width = 960; 21 let height = 540; 22 const gettingWidth = browser.storage.local.get('width'); 23 const gettingHeight = browser.storage.local.get('height'); 24 const popupURL = browser.extension.getURL('popup/popup.html'); 25 Promise.all([gettingWidth, gettingHeight]).then(results => { 26 if (results[0] && results[0].width) { 27 width = parseInt(results[0].width, 10); 28 } 29 if (results[1] && results[1].height) { 30 height = parseInt(results[1].height, 10); 31 } 32 const creating = browser.windows.create({ 33 url: popupURL, 34 type: 'panel', 35 width: width, 36 height: height, 37 }); 38 creating.then(() => { 39 newWindow(tabInfo.url); 40 }); 41 }); 42 } 43} 44 45function getInfoForTab(tabs) { 46 if (tabs.length > 0) { 47 const gettingInfo = browser.tabs.get(tabs[0].id); 48 gettingInfo.then(onGot); 49 } 50} 51 52browser.pageAction.onClicked.addListener(() => { 53 const querying = browser.tabs.query({currentWindow: true, active: true}); 54 querying.then(getInfoForTab); 55}); 56 57function updateActiveTab(tabs) { 58 function onGot(tabInfo) { 59 const YouTubewatchURL = 'https://www.youtube.com/watch'; 60 if (tabInfo.url.match(YouTubewatchURL)) { 61 browser.pageAction.show(tabs); 62 } 63 } 64 const gettingInfo = browser.tabs.get(tabs); 65 gettingInfo.then(onGot); 66} 67// listen to tab URL changes 68browser.tabs.onUpdated.addListener((tabId, changeInfo) => { 69 if (changeInfo.status === 'complete') { 70 console.log(tabId); 71 updateActiveTab(tabId); 72 } 73}); 74// listen to tab switching 75browser.tabs.onActivated.addListener((activeInfo) => { 76 updateActiveTab(activeInfo.tabId); 77});
新しいウインドウのhtmlが読み込んでるjs
javascript
1browser.runtime.onMessage.addListener(getURL);
###試したこと
エラーを調べてみたけれどわからなかった。
###補足情報(言語/FW/ツール等のバージョンなど)
firefox developer edition 54.0a2
firefox 64bit 52.0
回答1件
あなたの回答
tips
プレビュー