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

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

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

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

Firefox

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

JavaScript

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

Chrome extension

Chrome拡張機能

Q&A

解決済

3回答

3458閲覧

WebExtensionで特定のページにjsファイルを挿入したい

nekojiro

総合スコア43

Firefox WebExtensions

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

Firefox

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

JavaScript

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

Chrome extension

Chrome拡張機能

0グッド

0クリップ

投稿2017/02/17 02:57

編集2017/02/17 14:50

###前提・実現したいこと
firefoxのアドオンをwebextensionsで作っています。browser.storage.local.set()で保存した複数のurlと比較して一致したタブにtabs.executeScript()でjsファイルを挿入したい。
script.jsのconsole.log()のところにtabs.executeScript()を入れたい。

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

jsファイルが挿入されない

###該当のソースコード

manifest.json

"content_scripts": [{ "matches": ["<all_urls>"], "js": ["script.js"] }], "background": { "scripts": ["background.js"] }, "permissions": [ "storage", "activeTab", ]

script.js

javascript

1function urlcheck(item) { 2 const urlkey2 = Object.values(item); 3 for (const variable of urlkey2) { 4 const href = window.location.href; 5 if (variable === href) { 6 var plus = 0; 7 plus++; 8 } 9 } 10 if (plus === 1) { 11 console.log('yes'); 12 } 13} 14 15const gettingItem = browser.storage.local.get(); 16gettingItem.then(urlcheck); 17

###試したこと
このサイトを参考にして作りました

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

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

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

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

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

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

guest

回答3

0

backgroundのすくりぷとでは、直接には見えなbackground-pageというページのコンテキストで動いています。ですので、

javascript

1const href = window.location.href;

としておりますが、ここで取得されるのは、そのbackground-pageのURLとなりますので挿入されないのだと思います。

ただ、特定のページに拡張機能(JavaScript)を実行させたいのでしたら、content_scriptsを使用したほうがいいともいます。
manifest.json

json

1{ 2/// 3 "content_scripts": { 4 "matches": [ "https://hoge.com/*","https://fuga.com/*" ], 5 "js": [ "script.js","script2.js" ] 6 }, 7/// 8}

manifest.jsonにcontent_scriptsというキーの項目を追加し、上記のようにmatchesには拡張機能のJSを実行させたいURLのパターンを記述、jsに実行させたいjsファイルのパスを記述するだけで後は、対象のURLにアクセスすると拡張機能のJSが実行されます。

投稿2017/02/17 10:11

turbgraphics200

総合スコア4269

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

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

turbgraphics200

2017/02/17 15:39 編集

いや、だからそのexecuteScript()の代わりにcontent_scriptsを使っ他方が楽ですよということなのですが。matchesのパターンを["http://*/*", "https://*/*"]とすれば、すべてのURLとなります。
guest

0

executeScriptでないといけない理由が知りたいです。

###content_scriptsの例
https://www.google.co.jp/*にアクセスすると拡張機能のJSを実行させたいというのを、content_scriptsを使用した場合のコードです。
このコードを保存し、Firefoxで拡張機能を読み込み後、Firefoxでhttps://www.google.co.jpにアクセスしてみてください。左上にボタンが追加されるはずです。

manifest.json

json

1{ 2 "manifest_version": 2, 3 "name": "add button", 4 "version": "0.1", 5 6 "content_scripts": [ 7 { 8 "matches": ["https://www.google.co.jp/*"], 9 "js": ["cs.js"] 10 } 11 ] 12}

cs.js

javascript

1var btn = document.createElement('button'); 2btn.textContent = 'ボタン'; 3btn.style.position = 'absolute'; 4btn.style.left = btn.style.top = '5px'; 5document.body.appendChild(btn);

投稿2017/02/20 03:45

turbgraphics200

総合スコア4269

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

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

nekojiro

2017/02/20 04:01

今作ってるaddonはURLを保存してそのURLのサイトのみにjsが実行されるようなaddonを作っています。matchesだとmatchesに書いてあるURLにしかjsが実行されないで使いませんでした。 executeScriptだと好きなページでjsを実行できるのexecuteScriptを使いました。
guest

0

自己解決

for ofの中だとexecuteScriptは動きませんでした。それとpermissionsに"tabs"と"<all_urls>"が必要でした。backgroundのコンソールは開発ツールのブラウザツールボックスで見れました。

manifest.json

json

1 "background": { 2 "scripts": ["background_scripts/background.js"] 3 }, 4 "permissions": [ 5 "tabs", 6 "storage", 7 "activeTab", 8 "<all_urls>" 9 ]

background.js

javascript

1var test = false; 2browser.tabs.onUpdated.addListener(handleUpdated); 3 4function getActiveTab() { 5 return browser.tabs.query({active: true, currentWindow: true}); 6} 7 8function handleUpdated(tabId, changeInfo) { 9 10 const gettingItem = browser.storage.local.get(); 11 gettingItem.then((item) => { 12 const urlkey2 = Object.values(item); 13 for (const variable of urlkey2) { 14 if (variable === changeInfo.url) { 15 test = true; 16 } 17 } 18 }); 19 if (test) { 20 browser.tabs.executeScript(null, { 21 file: '/content_scripts/script.js', 22 }); 23 test = false; 24 } 25}

投稿2017/02/20 03:13

nekojiro

総合スコア43

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問