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

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

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

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

Q&A

解決済

2回答

2132閲覧

window.openで開いたWebページの入力フォームに値を入力させたい

nagomi72

総合スコア51

JavaScript

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

0グッド

0クリップ

投稿2019/03/28 07:58

実現したい仕様としては、ボタンを押したときに新しいタブで任意のWEBページを開き、
開いたWEBページの入力フォームに任意の値を入力させたいです。
新しいページを開くにはwindow.openを、フォームに値を入力するには document.getElementById( "formのid" ).value = "入力したい値"を
使用すれば実現できそうなのですが、window.openで新しいページは開くがフォームには何も入力されていないのが現状です。
改善点をご教授頂ければ幸いです。

以下ソースとなります。

<HTML> <HEAD> <TITLE>テスト</TITLE> </HEAD> <BODY> <SCRIPT language="JavaScript"> function openPage() { var subWindow = window.open("http://www.barracudacentral.org/lookups", '_blank'); var timer = 5; //sec var limit = (new Date()).getTime() + timer * 1000; //ここはサブウィンドウが開くのを待っているつもり。 //この処理をなくしたverも動作せず while( (new Date()).getTime() < limit) { try { if(subWindow && subWindow.document && subWindow.document.body && subWindow.document.getElementById) { break; } } catch(e) { } } subWindow.document.getElementById("ir_entry").value = "hogehoge" } </SCRIPT> <INPUT type="button" name="B1" value="click" onclick="openPage()"> </BODY> </HTML>

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

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

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

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

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

m.ts10806

2019/03/28 08:21

サブウィンドウで開かれてるの、このHTMLとは別サーバーですよね。
nagomi72

2019/03/28 08:26

その通りです。
m.ts10806

2019/03/28 08:29

よく考えてください。 他のサーバーから勝手に操作されてセキュリティ上危ないと思いませんか?
nagomi72

2019/03/28 09:20

無法地帯になってしまいますね…。 攻撃になってしまうとの指摘も受けましたので別の方法を模索したいと思います。
guest

回答2

0

親。

JavaScript

1var subWindow; 2window.addEventListener('message', event => { 3 if (subWindow) { 4 subWindow.postMessage('入力したい値', '*'); 5 } 6}, false);

子。

JavaScript

1document.addEventListener('DOMContentLoaded', event => { 2 if (window.opener) { 3 opener.postMessage({ message: 'loaded' }, '*'); 4 } 5}, false); 6 7window.addEventListener('message', event => { 8 document.querySelector('[name="hogehoge"]').value = event.data; 9}, false);

https://developer.mozilla.org/ja/docs/Web/API/Window/postMessage

投稿2019/03/28 09:16

x_x

総合スコア13749

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

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

nagomi72

2019/03/28 09:26

ご回答頂きありがとうございました。
x_x

2019/03/28 09:31

セキュリティーの懸念があるのかもしれませんが、リンク先にあるように origin などを確認することで他からのアクセスは排除できます。
guest

0

ベストアンサー

iframe.contentWindow, window.parent, window.open, window.opener といった JavaScript API を用いると、ドキュメントが直接互いに参照することができます。2 つのドキュメントが同一のオリジンではない場合、 Window オブジェクトや Location オブジェクトなど、限られたオブジェクトにのみアクセスすることができます。

同一オリジンポリシー - ウェブセキュリティ | MDN

ということですから、subWindow.documentには触れません。

投稿2019/03/28 08:39

編集2019/03/28 08:40
Lhankor_Mhy

総合スコア36074

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

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

nagomi72

2019/03/28 09:26

ご回答頂きありがとうございました。 別の方法を模索したいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問