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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Firefox WebExtensions

Firefox WebExtensionsは、Firefox向けアドオンをクロスブラウザで開発するためのAPIおよび技術。Google Chrome/Operaでサポートされているextension API との互換性を持ちます。

Firefox

Mozilla Foundationによって作られた無料、オープンソース、クロスプラットフォームなウェブブラウザ

JavaScript

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

Q&A

解決済

1回答

2538閲覧

初回読み込み時にコンテンツスクリプトが起動しない。

Chikage_Haruse

総合スコア14

Firefox WebExtensions

Firefox WebExtensionsは、Firefox向けアドオンをクロスブラウザで開発するためのAPIおよび技術。Google Chrome/Operaでサポートされているextension API との互換性を持ちます。

Firefox

Mozilla Foundationによって作られた無料、オープンソース、クロスプラットフォームなウェブブラウザ

JavaScript

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

0グッド

0クリップ

投稿2021/09/10 15:47

前提・実現したいこと

YouTubeのチャットの翻訳をするFirefox拡張機能を作っています。
コンテンツスクリプトを走らせることで翻訳をしているのですが、なぜかそもそもコンテンツスクリプトが走らないことがあります。

発生している問題・エラーメッセージ

YouTubeの動画再生ページを初めて開いたとき、コンテンツスクリプトが走りません。具体的には以下のような事象が発生します。

前提として、テストのために以下のようなファイルを配置しました。

test.js

js

1console.log("test.js run!")

manifest.json

json

1... 2 "content_scripts": [ 3 { 4 "matches": [ 5 "*://*.youtube.com/live_chat*", 6 "*://*.youtube.com/watch*" 7 ], 8 "js": ["youtube.js", "test.js"] 9 } 10 ], 11...

さらに、翻訳を行うスクリプトの先頭にもログを残すよう書きました。

js

1'use strict'; 2// 翻訳apiのURL 3let translaterUrl = "hogehoge"; 4// 翻訳する言語 5let targetLang; 6// 翻訳するノード 7let target; 8// 翻訳するチャット欄のあるフレーム 9let targetFrame; 10// 翻訳の監視が走っているかの値 11let observerRan = false; 12 13// テスト用のログ 14console.log("youtube.js run!"); 15...

以下はこの環境下での行った操作とログです。
1.YouTubeの再生ページを初めて開いたときのログ

LegacyDataMixin will be applied to all legacy elements. Set `_legacyUndefinedCheck: true` on element class to enable. CSI/tbsd_ cb=gapi.loaded_0:404 CSI/_tbnd cb=gapi.loaded_0:404 WEBGL_debug_renderer_info is deprecated in Firefox and will be removed. Please use RENDERER.

2.そこからさらに別の動画に飛んだ時のログ

LegacyDataMixin will be applied to all legacy elements. Set `_legacyUndefinedCheck: true` on element class to enable. live_chat_polymer.js:3039 CSI/tbsd_ cb=gapi.loaded_0:404 CSI/_tbnd cb=gapi.loaded_0:404 LegacyDataMixin will be applied to all legacy elements. Set `_legacyUndefinedCheck: true` on element class to enable. desktop_polymer.js:4234

3.その動画ページでF5を押し、ページをリロードしたときのログ

youtube.js run! //ここでやっとコンテンツスクリプトが走る test.js run! 2 stopTranslateServiceの多重呼び出しがかかりました。 youtube.js:92 //(内部的にこのログは正常な処理です。) LegacyDataMixin will be applied to all legacy elements. Set `_legacyUndefinedCheck: true` on element class to enable. live_chat_polymer.js:3039 CSI/tbsd_ cb=gapi.loaded_0:404 CSI/_tbnd cb=gapi.loaded_0:404

試したこと

ひたすらいろいろな場所にブレークポイントを置いて、ログを出力するコードも書きテストしましたが、どうしても何も引っ掛からないのでそもそもコンテンツスクリプトが走っていないということしかわかりませんでした。

補足情報(FW/ツールのバージョンなど)

開発環境:
Visual Studio Code 1.60.0 + Debugger for Firefox v2.9.4
実行環境:
Windows 10 21H1
Firefox Developer Edition 93.0b3

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

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

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

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

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

guest

回答1

0

ベストアンサー

manifest.json の matches にマッチしないので、youtube のトップページでは実行されません。

次に動画のページに遷移したときですが、youtube では通常のページ遷移が行われていません。
これは、開発者ツールのネットワークタブを開き、ページ遷移してみるとリセットされないことで分かります。
コンテンツスクリプトが実行されるのはページがロードされたときです。
通常の遷移が行われていないのでページがロードされず、コンテンツスクリプトは実行されません。

動画のページを直接開くと URL は matches にマッチし、ページのロードも行われるので実行されます。

投稿2021/09/12 16:30

neko_daisuki

総合スコア2090

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

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

Chikage_Haruse

2021/09/13 09:22

ご回答ありがとうございます。 ページスクリプトが動かない原因はわかりました。しかし、matchesが使えないとなると動画ページにいるのか判定する方法がわかりません。ほかにURLを元に処理を決めることができる方法はないでしょうか。
neko_daisuki

2021/09/13 09:51

URL の変更を感知できれば良いのですが、僕はその方法を知りません。 思いつくのは、matches に *://*.youtube.com/* を指定します。 次に MutationObserver で body 以下の変更を監視します。 翻訳したいノードが追加されたら翻訳します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問