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

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

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

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

Q&A

解決済

1回答

35653閲覧

window.open後の子ウィンドウへの値の設定

rice

総合スコア70

JavaScript

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

0グッド

2クリップ

投稿2015/09/10 06:51

Chromeでwindow.openで開いた子ウィンドウに開いた直後に親ウィンドウから値を設定したいのですがうまく行きません。
Firefoxでも設定出来ませんでしたが、window.open直後でデバッガで処理を止めて少し経ってから処理を再開すると動作しました。
Firefoxの場合は、子ウィンドウの描画が完了していたら要素が存在するので上手く行くようです。
Chromeの場合は、デバッガでwindow.open直後に処理を止めても駄目でした。
jQueryによる要素の取得でもgetElementByIdでも同様でした。

解決策などご存知の方がいらっしゃいましたら、教えて頂けますでしょうか。
親画面でメッセージを保持しておいて、子画面側で読み込み完了時openerを使ってに取得するくらいしか思いつきません。
よろしくお願いいたします。

【親画面のソース】

HTML

1<html lang="ja"> 2<head> 3 <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> 4 <title>子画面へ設定</title> 5 <script type="text/javascript" src="jquery-2.1.4.min.js"></script> 6 <script> 7 8 var win; 9 10 function openChildWindow() { 11 win = window.open("chat.html", "WindowName","width=600,height=500,resizable=yes,scrollbars=yes"); 12 var messageArea = win.$("#messageArea"); 13 messageArea.append("<div>open直後に設定</div>"); 14// var messageArea = win.document.getElementById('messageArea'); 15// messageArea.innerHTML ="open直後に設定"; 16 } 17 18 function notify() { 19 var messageArea = win.document.getElementById('messageArea'); 20 messageArea.innerHTML ="openしてから別で設定"; 21 22 } 23 24 </script> 25</head> 26<body> 27 <input type="button" id="childOpenButton" value="子画面を開く" onclick="openChildWindow();"/> 28 <input type="button" id="notificationButton" value="子画面へ通知" onclick="notify();"/> 29</body> 30</html> 31

【子画面のソース】

HTML

1<html lang="ja"> 2<head> 3 <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> 4 <title>子画面</title> 5 <script type="text/javascript" src="jquery-2.1.4.min.js"></script> 6 <script> 7 </script> 8</head> 9<body> 10 <div id="messageArea"></div> 11</body> 12</html> 13 14コード

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

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

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

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

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

guest

回答1

0

ベストアンサー

こんにちは。

明確な回答ではありませんが、ご了承ください。

ブラウザによっては親ウィンドウから子ウィンドウの操作を許容していないものもあるようです。
こちらのサイトが参考になるかもしれません。
http://d.hatena.ne.jp/masaya50/20150124/1422047233


Firefoxでも設定出来ませんでしたが、window.open直後でデバッガで処理を止めて少し経ってから処理を再開すると動作しました。

Firefoxではchat.htmlが読み込まれた後なら操作できるからだと思われます。
こちらは次のように読み込みが完了したら処理をするように変えることで行えるかと思われます。

javascript

1win = window.open(...); 2$(win).load(function(){ 3 $('#messageArea', win.document).append("<div>open直後に設定</div>"); 4});

ご参考までに。

投稿2015/09/10 09:39

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

rice

2015/09/11 02:29

nfnofaceさん ご回答ありがとうございます!セキュリティー上の理由から出来ないようになっているのですね。 一度開いてからだと値が設定出来るようなので、初回開いた時は親ウィンドウ側に値を保持しておいて子画面のload完了のタイミングで値を親画面から取得するしかなさそうです。この方法でやりたい事は実現出来ました。 $(win).load(function(){・・・}の方法もChromeでは駄目でしたがFirefoxでは操作出来ました! こちら利用させて頂きます。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問