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

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

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

Microsoft Edgeは、マイクロソフト社が開発する新しいWebブラウザです。Windows 10から標準搭載されており、Internet Explorerとは違うレンダリングエンジンが採用されています。

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回答

1384閲覧

chrome extensionでedge拡張機能「コード選択 子画面」を作りたい

val0307

総合スコア12

Microsoft Edge

Microsoft Edgeは、マイクロソフト社が開発する新しいWebブラウザです。Windows 10から標準搭載されており、Internet Explorerとは違うレンダリングエンジンが採用されています。

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クリップ

投稿2021/10/20 02:31

編集2021/10/25 04:09

■実現したい事
Microsoft Edgeの拡張機能として、以下を実装したい
イメージ説明
1.親画面の入力エリアで右クリックし、コンテキストメニューから「コード選択」をクリック
2.子画面が開き、選択候補から設定したい値のボタンをクリック
3.親画面の入力エリアに、選択した値が反映

■実装した事
イメージ説明
1.background.jsで、コード選択のコンテキストメニューを追加
2.コンテキストメニューをクリック時、window.openで、子画面(code_select.html)を開く
3.しかし、子画面から親画面のdocumentは参照できない(backgroundのdocumentとなる)
4.background.jsから、content.jsを呼び出し、親画面の値を変更はできた

■検討中
1.sendMessage onMessageで、code_select.htmlで選択した値を、
background.jsに渡して、それをcontent.jsに渡して、content.jsが親画面を編集するべきか。
2.子画面の選択値を、sessionStorageに設定して、content.jsがsessionStorageの値を親画面に設定するべきか。
3.そもそも考え方がNGなのか。。

■確認事項
1.実現したい事について、ご助言頂ければありがたいです(。。
2.子画面から親画面に値を設定する実装方法を、ご教示お願いします(。。

■ソース
manifest.json

json

1{ 2 "name": "コード選択", 3 "author": "テスト開発者", 4 "version": "0.1", 5 "manifest_version": 2, 6 "description": "選択したコードを設定します", 7 "background": { 8 "scripts": ["background.js"], 9 "persistent": true, 10 }, 11 "permissions": [ 12 "contextMenus","activeTab" 13 ] 14}

background.js

javascript

1//Edge の名前空間(browser) がなけれぱ chrome の名前空間を使用する 2var browser = browser||chrome; 3 4// ------------------------------------------------------------------------------------------ 5//コンテキストメニューに拡張のメニューを追加 6browser.contextMenus.create({ 7 8 id: 'codeSelect', 9 10 title: 'コード選択', 11 12 contexts: ['editable'], 13 14 onclick: (info, tab)=>{ //クリックされた際のアクション。info:onclick イベントの仮引数 15 window.open('code_select.html','','titlebar=yes,toolbar=yes,location=yes,status=no,menubar=yes,scrollbars=yes,resizable=yes,width=700,Height=300,left=0,top=0'); 16 17 // tab で contextMenu.js を実行する 18 chrome.tabs.executeScript(tab.id, { file: 'content.js' }) 19 20 } 21});

content.js

javascript

1document.getElementById("code1").value = '設定したい内容';

親画面

html

1<!DOCTYPE> 2<head> 3<meta content="ja" http-equiv="Content-Language" /> 4<meta content="text/html; charset=utf-8" http-equiv="Content-Type" /> 5<title>親画面テストページ</title> 6<script> 7</script> 8</head> 9<body> 10<p>サブ画面からインプット</p> 11<p>名前コード</p><br /> 12 <input id="code1" type="text" onchange="mychange()" /><br /> 13</body> 14</html> 15

子画面(code_select.html)

html

1<!doctype html> 2<html lang="ja"> 3<head> 4<meta charset="UTF-8"> 5<title>コード選択</title> 6<script type="text/javascript" src="js/jquery-3.5.1.min.js"></script> 7<script type="text/javascript" src="js/bootstrap.min.js"></script> 8<!-- コード選択処理 --> 9<script type="text/javascript" src="js/test.js"></script> 10</head> 11 12<body> 13<button id="t01">テスト</button> 14</body> 15</html> 16

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

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

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

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

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

itagagaki

2021/10/20 02:46

window.opener.documentで参照できませんでした?(自分では確認しないでのお尋ねですが)
val0307

2021/10/20 03:56

子画面で実行:alert(window.opener.document.documentURI); 結果:chrome-extension://bgkhiknncjemjpfgfaohffbhnjpkehea/_generated_background_page.html となったため、子画面からは、background.js側のpageが参照され、 親画面は参照不可と判断しておりました。
guest

回答2

0

子画面を親画面のモーダルにしたらどうですか?同じページなので、対応がシンプルになります。

投稿2021/10/29 03:20

heroyct

総合スコア434

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

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

0

拡張機能で作ったページのスクリプトから一般のページにアクセスすることは不可能なので、質問文に書かれているような方針で問題ないと思います。

1.sendMessage onMessageで、code_select.htmlで選択した値を、

background.jsに渡して、それをcontent.jsに渡して、content.jsが親画面を編集するべきか。

できると思います。子画面からcontent.jstabs.sendMessage()で直接メッセージを送ることも可能かもしれません。

2.子画面の選択値を、sessionStorageに設定して、content.jsがsessionStorageの値を親画面に設定するべきか。

拡張機能内で sessionStorage を使えたかどうか覚えていませんが、chrome.storage で似たようなことが可能かと思います。


あと、chrome.scripting.executeScript() でコードを注入することでも可能かもしれませんね。

投稿2021/10/20 02:42

編集2021/10/29 03:29
int32_t

総合スコア20884

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問