質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.38%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Chrome extension

Chrome拡張機能

Q&A

解決済

1回答

751閲覧

Chrome拡張のjavascriptで、chrome.tabs.sendMessageにエラーが出る

kiyoken

総合スコア13

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Chrome extension

Chrome拡張機能

0グッド

1クリップ

投稿2024/01/25 10:08

実現したいこと

Chrome拡張機能を作っていて(実装はMS Edge)、入力した秒数でタブをリロードし続ける機能をもたせたいです。

発生している問題・分からないこと

popup.jsのcontent-script.jsにメッセージを送るchrome.tabs.sendMessageという部分がエラーを吐いて、機能が実行できません。

エラーメッセージ

error

1Uncaught TypeError: Error in invocation of tabs.sendMessage(integer tabId, any message, optional object options, optional function callback): No matching signature.

該当のソースコード

popup.js

1const startbotton = document.getElementById('startbotton'); 2startbotton.addEventListener('click', start); 3const stopbotton = document.getElementById('stopbotton'); 4stopbotton.addEventListener('click', stop); 5window.ID =! null; 6function stop(){ 7 chrome.tabs.query( {active:true, currentWindow:true}, function(tabs){ 8 chrome.tabs.sendMessage(tabs[0].id, {message: 'stopreload'}); 9 }); 10 window.ID = null 11}; 12function start(){ 13 const second = document.getElementById("sec"); 14 const interval = second.value + '000'; 15 const CurrentTabs = [chrome.tabs.query({active:true, lastFocusedWindow:true})]; 16 if(ID){ 17 const reload = setInterval(function(){ 18 if(ID == null){ 19 clearInterval(reload); 20 }; 21 chrome.tabs.sendMessage(CurrentTabs[0].id, {message: 'reloading'}); 22 },interval); 23 } 24};

content

1chrome.runtime.onMessage.addListener(function(request){ 2 if(request.message == 'reloading'){ 3 window.location.reload(); 4 }; 5 console.log(request.message); 6});

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

https://stackoverflow.com/questions/60079291/chrome-tabs-sendmessage-error-handling-response
の回答とほぼ同じコードですが、エラーは解決しませんでした。

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

js

1 const CurrentTabs = [chrome.tabs.query({active:true, lastFocusedWindow:true})];

chrome.tabs.query() の戻り値を利用するなら、await する必要があります。

js

1 const CurrentTabs = await chrome.tabs.query({active:true, lastFocusedWindow:true});

または、同じファイルの stop() のようにコールバック関数で処理する必要があります。

投稿2024/01/25 22:07

int32_t

総合スコア21570

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kiyoken

2024/01/25 23:34

回答ありがとうございます。 試したところ問題が解決しました! ベストアンサーに選ばせていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.38%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問