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

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

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

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

JavaScript

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

Chrome extension

Chrome拡張機能

Q&A

2回答

454閲覧

自作のchrome拡張機能が上手く動作しない

umou

総合スコア0

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

JavaScript

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

Chrome extension

Chrome拡張機能

0グッド

1クリップ

投稿2023/07/30 07:49

 chromeの拡張機能を作ってみたいと考え始めた初心者の質問です。まずは練習として、youtubeの再生動画上にカーソルを乗せると、alertが表示されるようなコードを書いてみて、拡張機能を読み込んでみたのですが、何も反応してくれませんでした。また、chrome上でデベロッパーツールを開き、以下のcontent.jsをコピーして実行してみたところ、こちらはきちんとalertが表示されました。
よって、jsファイルではなく、manifest.jsonの方に誤りがあると思うのですが、どのようにすれば正しく動作するか教えていただきたいです。

該当のソースコード

manifest.json

1{ 2 "manifest_version": 3, 3 "name": "YouTube Video Alert", 4 "version": "1.0", 5 "permissions": [ 6 "tabs", 7 "activeTab" 8 ], 9 "host_permissions":[ 10 "<all_urls>" 11 ], 12 "content_scripts": [ 13 { 14 "matches": ["https://www.youtube.com/*"], 15 "js": ["content.js"] 16 } 17 ] 18}

content.js

1if(document.querySelector("video")){ 2 const video = document.querySelector("video"); 3 video.addEventListener("mouseover", () => { 4 alert("test") 5 }); 6}

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

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

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

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

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

guest

回答2

0

content.jsが実行されるタイミングではvideo要素が存在しない可能性があります。
content_scriptsで指定したjsが実行されるタイミングのデフォルトはdocument_idleです。
DOMが構築され、window.onloadイベントが処理されるより前のタイミングです。

参考リンク:https://developer.chrome.com/docs/extensions/mv3/content_scripts/

content.jsをコピーして実行するとうまくいくのは、実行のタイミングではすでにvideo要素が存在するからでしょう。

見たところ、manifest.jsonには問題はなさそうです。

js

1setTimeout(function loop() { 2 const video = document.querySelector("video"); 3 if (video != null) { 4 //mouseoverにalertを表示する関数を登録する処理 5 } else { 6 setTimeout(loop, 0); 7 } 8}, 0);

↑のようにして、video要素が検出されるまでループさせるという手が考えられます。

投稿2023/08/06 15:22

_peanuts_

総合スコア130

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

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

0

ChatGPTに質問してみたら次の答えでしたがいかがでしょうか

問題点として、このcontent.jsのプログラムにはマウスオーバーイベントが一度だけ追加される可能性があります。これは、もしページ上で動的に動画が追加されたり入れ替わったりした場合に、新しく追加された動画にはマウスオーバーイベントが登録されていないためです。
対応策としては、MutationObserverを使ってページ上の動画要素の変更を監視し、新しく追加される動画に対してもマウスオーバーイベントを追加する必要があります。
以下は、対応策を考慮したcontent.jsのプログラム例です

js

1// マウスオーバー時の処理を関数化 2function handleMouseOver(event) { 3 alert("test"); 4} 5 6// MutationObserverのコールバック関数 7function observeVideos(mutationsList, observer) { 8 for (const mutation of mutationsList) { 9 if (mutation.type === "childList" && mutation.addedNodes.length) { 10 // 追加されたノードをループして動画要素を探す 11 mutation.addedNodes.forEach((node) => { 12 if (node.tagName && node.tagName.toLowerCase() === "video") { 13 // 動画要素が追加されたらマウスオーバーイベントを追加 14 node.addEventListener("mouseover", handleMouseOver); 15 } 16 }); 17 } 18 } 19} 20 21// 初期化:既存の動画要素に対してマウスオーバーイベントを追加 22const existingVideos = document.querySelectorAll("video"); 23existingVideos.forEach((video) => { 24 video.addEventListener("mouseover", handleMouseOver); 25}); 26 27// MutationObserverの設定 28const observer = new MutationObserver(observeVideos); 29const config = { childList: true, subtree: true }; 30observer.observe(document.body, config); 31

投稿2023/07/31 05:38

odataiki

総合スコア984

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問