dポイントプレゼントキャンペーン実施中!

処理概要:親ウィンドウからボタンクリック時にjavascriptのみで
     子ウィンドウを作成し、遷移させた後、子ウィンドウの
     フォームをサブミットする。


-------以下ソース--------
var url = "/index.html";
hWin=window.open("","");
window.hWin.location.href=url;
setTimeout(a,10000);

function a(){
window.hWin.document.form.submit();
// window.hWin.document.form.name.value = "住友";
// window.hWin.document.form.button1.click();
}
 * index.html にはformというフォームがあり、nameという
  テキストボックスとbutton1 というボタンをフォーム内に
  持っているとします。

以上のような簡単なものですが、7行目のsubmitでこけます。
window.hWin.document.formがないようでヌルポになります。
親から子ウィンドウのサブミットをjavascriptだけで制御
できないでしょうか。
また、できればコメントアウトしているところ、
DOM要素を指定して値をテキストボックスに入れたり
フォームをボタンによりクリックしてサブミットもしたいです。
ちなみに、setTimeout を利用しているのは、遷移が終わり、子ウィンドウの要素が確実に作成されている状態にするためです。

また、遷移先にSSLを設定している部分と設定していない部分があり、javascriptの途中で"ここに遷移していいですか?"みたいなダイアログが表示されます。"混雑しているページの処理"をインターネットオプションから"有効"にする(ダイアログを表示するではなく)と表示されないのですが、奨励されないので
他にいい方法はないでしょうか。

A 回答 (2件)

No.1です。


調べて見たら、こんな感じでいいみたい。
----- main -----
<html>
<head>
<script type="text/javascript">
var url = "/index.html";
hWin=window.open("","");
window.hWin.location.href=url;
function a(){
var f=hWin.document.forms['form1'];
f.name1.value = "住友";
f.button1.click();
f.submit();
}
</script>
</head>
<body>
テスト
</body>
</html>
----- index.html -----
<html>
<head>
<script type="text/javascript">
window.onload=function(){window.opener.a();}
</script>
</head>
<body>
<form name="form1" method="" action="/test.cgi">
<input type=text name="name1" >
<input type="button" name="button1" value="hoge" onclick="alert('Pushed!');">
</form>
</body>
</html>
    • good
    • 0

親ウインドウから、ターゲット指定して非表示のフォームをサブミットしても同様の結果を得られるとは思いますが・・



form、nameというnameが悪さをしている可能性があります。
IEはそれを修正すれば作動しました。
それでも、ブラウザによってはDOMが解釈されないみたいで、試行錯誤してみましたが、こんな感じでどうでしょう? (IE6、Opera8のみ確認)
----------- Main --------------
var url = "/index.html";
hWin=window.open("","");
window.hWin.location.href=url;

function a(f){
f.name1.value = "住友";
f.button1.click();
f.submit();
}
----------- index.html --------------
<html>
<head>
<script>
window.onload=function(){
window.opener.a(document.form1);
}
</script>
</head>
<body>
<form name="form1" method="" action="/test.cgi">
<input type=text name="name1" >
<input type="button" name="button1" value="hoge" onclick="alert('Pushed!');">
</form>
</body>
</html>
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!