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

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

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

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

JavaScript

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

Chrome extension

Chrome拡張機能

Q&A

1回答

3324閲覧

Chrome拡張がリロードするなど特定の実行タイミングでしか実行されない

Dolphiiiin

総合スコア19

Chrome

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

JavaScript

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

Chrome extension

Chrome拡張機能

0グッド

0クリップ

投稿2021/09/28 12:57

前提・実現したいこと

特定のページにアクセスした際に、コンソール上に文字を表示するChrome拡張を作成しようとしています。
対象のページは動的に生成されるWebサイトです。

該当のソースコード

manifest.json

json

1{ 2 "name": "chrome extension test", 3 "manifest_version": 2, 4 "version": "1.0", 5 6 "content_scripts": [ 7 { 8 "matches": ["https://example.com"], 9 "js": ["content_script.js"] 10 } 11 ] 12}

content_script.js

javascript

1console.log("hello")

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

<a>タグによるリンクからアクセスした際にはconsole上に文字列が表示されません。
対象ページのURLをアドレスバーに入力した場合と、ページアクセス後にリロードした場合は正常に動作しています。

試したこと

この拡張機能を除くすべての拡張機能を無効にした状態で実行しても結果は変わりませんでした。


また、コンソール上では以下のエラー等が表示されています。

拡張機能の実行に失敗した場合

> [Webサイト上の404エラー(エラー文は省略)]

拡張機能の実行に成功した場合

> Unchecked runtime.lastError: The message port closed before a response was received. > [Webサイト上の404エラー(エラー文は省略)] > hello [拡張機能からのconsole.log] > The resource <URL> was preloaded using link preload but not used within a few seconds from the window's load event. Please make sure it has an appropriate `as` value and it is preloaded intentionally.

尚、拡張機能を無効にした場合、helloとconsoleに出力されなくなるだけであり、そのほかのエラーは継続して出現します。

何かしらのスクリプトの記述ミスあるいは、Chrome側でなにか設定が必要なのでしょうか。

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

Windows 10(64bit Home)
Google Chrome(93.0.4577.82)
Google Chrome Canary(96.0.4656.0)

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

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

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

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

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

guest

回答1

0

ブラウザの開発者ツールのネットワークタブを開きページ遷移してみてください。
遷移すると通常リセットされるはずが、そのサイトでは前の読み込みが残っているはずです。

content script が実行されるのはページが読み込まれたときですので、この場合には実行されません。

そのサイトでリンクをクリックした際に console.log を実行したい場合は、
初回読み込み時に Mutation observer で DOM の変更を監視し、
変化があった場合に console.log すると良いでしょう。

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

Chrome拡張機能のjavascriptでclassが取得できない

投稿2021/09/28 13:30

編集2021/09/28 13:31
neko_daisuki

総合スコア2090

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

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

Dolphiiiin

2021/09/28 15:40

回答ありがとうございます。 確かにネットワークタブ上では前のページの情報が残っていることを確認できました。 以下の変更を行いました manifest.json "matches": ["https://example.com"], を、"matches": ["*://example.com/*"],に変更 content_script.js var observer = new MutationObserver(function (mutations) { mutations.forEach(function (mutation) { if(location.href =="https://example.com"){ //目的のサイトのURLかを判断 console.log("hello") } }) }); observer.observe( document, { characterData: true, childList: true, subtree: true } ); Mutation observerについてよく調らべてみて、なんとなくでコードを組んだのですが、どうしてもDOMの変更を検知した回数だけconsole.logを実行してしまいます。 どこかで条件分岐等を挟む必要があるのでしょうか。
neko_daisuki

2021/09/28 15:43

はい。 今は document 以下を監視してますが、例えば title タグを監視するとかすれば良いと思います。 本当は URL の変更で発火するイベントがあれば良いのですが、 僕は見つけられませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問