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

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

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

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

Chrome extension

Chrome拡張機能

Q&A

解決済

1回答

2558閲覧

chrome拡張のpopup内要素の取得方法を教えてください

Mikan2

総合スコア8

JavaScript

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

Chrome extension

Chrome拡張機能

0グッド

0クリップ

投稿2022/05/14 15:21

chrome拡張を使ってpopupのテキストボックス内に入力した値を
特定のwebページのテキストボックスに入力したいのですが
自作したpopupのテキストボックスから値の取得ができません。

やりたいことのイメージは以下の図です

イメージ説明

popupのボタン押下後コンソール画面にて
Uncaught ReferenceError: textname is not defined
のエラーがでておりおそらく
textname = document.forms[0].elements[0].value;
ここで代入ができていないのだと思うのですが正しい代入方法をご教授いただきたいです。

お手数おかけしますがよろしくお願いします。

以下がhtmlとjsファイルとmanifest.jsonです

popup.html

1<!DOCTYPE html> 2<html> 3<body style="min-width:100px"> 4<!--<input type="button" id="id_Red" value="Red"> 5<br><br> 6<label for="uname">入力してください: </label> 7<input type="text" name="textname" size="15" maxlength="20" value="川口">--> 8<form id="form"> 9 <input type="text" name="inputnamet" size="15" maxlength="20" value></input> 10 <input type="submit" class="btn btn-primary" value="保存"> 11</form> 12 13<script src="myscript.js"></script> 14</body> 15</html>

myscript.js

1var textname ; 2 3 4document.getElementById('form').onsubmit =function () { 5 textname = document.forms[0].elements[0].value; 6 console.log(textname); 7 chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => { 8 chrome.scripting.executeScript({ 9 target: {tabId: tabs[0].id}, 10 function:nameOutput 11 }); 12 }); 13} 14 15function nameOutput(){ 16 document.getElementById("w2firstName").value = textname; 17 console.log(textname); 18 19} 20

manifest.json

1{ 2 "name": "Chapter 5 (MV3)", 3 "version": "1.0", 4 "manifest_version": 3, 5 "description": "This is Chapter 5", 6 "permissions": ["scripting"], 7 "host_permissions": [ 8 "http://*/*", 9 "https://*/*" 10 ], 11 "action": { 12 "default_icon": "Chapter_5.png", 13 "default_title": "I am Chapter 5", 14 "default_popup": "popup.html" 15 } 16}

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

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

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

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

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

guest

回答1

0

ベストアンサー

chrome.scripting.executeScript は指定したタブにスクリプトを挿入して実行させます。
指定した関数 nameOutput は、現在動いているスクリプトとは異なるインスタンス、異なる名前空間で動くことになります。
したがって現在動いているスクリプトのグローバル変数textnameにはアクセスできません。
そこで textname is not defined のエラーとなります。
引数として渡してあげると良いでしょう。

JavaScript

1 chrome.scripting.executeScript({ 2 target: {tabId: tabs[0].id}, 3 function:nameOutput, 4 args: [textname] 5 });

JavaScript

1function nameOutput(textname) {

投稿2022/05/14 15:58

itagagaki

総合スコア8402

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

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

Mikan2

2022/05/14 16:06

できました!!!! ありがとうございます! 大変助かりました!!!神
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問