JavaScriptを使い、別のwindowをreloadさせようとしています。

別のwindowの名前はmainです。
どのように書けばいいでしょうか。
なお、mainは親ウインドウではありません。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2005/08/01 12:43:49
  • 終了:--

回答(4件)

id:t_akir No.1

t_akir回答回数75ベストアンサー獲得回数02005/08/01 15:08:58

ポイント10pt

http://www.tohoho-web.com/js/window.htm

ウィンドウ(Window)

’top.main.location.reload’ という指定ではダメですか?


もしくは、

opener.top.main

top.opener.top.main

opener.top.opener.top.main

など、’top’ と ’opener’ を組み合わせると、当たりがでると思います(笑)

自分もよく苦労しますので…。

id:rea8833 No.2

rea8833回答回数2ベストアンサー獲得回数02005/08/01 13:25:45

ポイント20pt

http://www.tagindex.com/javascript/window/open1.html

JavaScript/ウィンドウ/サブウィンドウを開く(クリック時)Aタイプ - TAG index

サブウィンドウを開いた場合、下のように、サブウインドウの更新をすることが出来ます。


main1 = window.open(url, ”main”);


main1 = location.reload();

id:takeuchi_k

質問の意図が伝わっていないようです。舌足らずで申し訳ないです。

(1)mainがあり、「ログイン」というリンクがある

(2)ログインをクリックすると、ショウウインドウsubが開く。subにはパスワード入力フォームがある。

(3)subでパスワードを入力すると、cgiによる認証になり、認証をパスすると、subに「認証完了」という表示を出す。

(4)subに「閉じる」ボタンがあり、クリックするとsubが閉じ、mainだけが残る。

このような流れなのですが、3の段階で、mainをリロードさせたいのです。

「mainはsubの親ウインドウだから、window.openerでいいだろう」といわれそうですが、2から3の過程で一度画面が書き換わっているので、3の段階では、小ウインドウはmainの「孫」となっているのです。

パスワードが違ってサイド入力したりなどすると、何世代も子孫にある可能性があります。ですので、mainという名前のついている親ウインドウを決めうちでリロードする方法を知りたいのです。

2005/08/01 13:36:26
id:typista No.3

typista回答回数359ベストアンサー獲得回数72005/08/01 13:38:04

ポイント20pt

以下のような記述で良いでしょうか?


まず、以下をtest.htmlとして保存し、main.htmlは任意で作成してください。

test.htmlを開くとonLoadでmain.htmlがウィンドウオープンされます。

→ ウィンドウ名は”main”

  ※mainは親ウィンドウではありません


main.htmlの内容を適宜書き換えた後、test.htmlの「push me」ボタンを押下して、reloadされていることを確認してください。


<html>

<script language=”JavaScript”>


var newwin;


function winopen() {

newwin = window.open(”main.html”,”main”);

newwin.moveTo(0,0);

newwin.resizeTo(screen.width,screen.height);

}


function winreload() {

newwin.location.reload()

}


</script>


<body onLoad=”winopen()”>


<form>

<input type=”button” onClick=”winreload()” value=”push me” />

</form>


</body>

</html>

id:takeuchi_k

ありがとうございます。

でも、

’newwin.location’はNullまたはオブジェクトではありません

のエラーが出ます。

2005/08/01 13:49:46
id:akibare No.4

akibare回答回数157ベストアンサー獲得回数52005/08/01 15:08:47

ポイント20pt

間違っていたらごめんなさい。Subの内容を何回書き換えてもwindowにおける親子関係は変わらないと思います。


例)main.htmlからlogin.htmlを開き、中身をsuccess.htmlにしてもwindow.openerはやはりmainです。


【main.html】

<html>

<head>

<script>

function openAuth()

{

window.open(”login.html”,”login”);

}

</script>

</head>

<body>

<button onClick=”openAuth()”>Login</button>

</body>

</html>


【login.html】

<html>

<head>

<script>

function login()

{

location.href=”success.html”;

}

</script>

</head>

<body>

クリックしてログイン


<button onClick=”login()”>Login</button>

</body>

</html>


【success.html】

<html>

<head>

<script>

function refreshMain()

{

window.opener.location.reload();

window.opener.document.body.innerHTML = ”Welcome!”;

}

</script>

</head>

<body onload=”refreshMain()”>

ログイン成功!


<button onClick=”window.close()”>Close</button>

</body>

</html>


実際にはsuccess.htmlは、login.htmlをsubmitした時にCGIでredirectするか、直接書いているかどちらかになるけど結果は同じだと思います。


CGIにて、一度subのウィンドウを*閉じている*ということであれば話は違いますが。。

id:takeuchi_k

ありがとうございます。

確かにそのとおりでした。subの名前は変わらず、window.opener.location.reload()で処理できました。

私の状況再現ミスにて、皆様にご迷惑をおかけいたしましたことをお詫びいたします。

2005/08/01 15:14:28
  • id:aki73ix
    参考

    サンプルです

    フレームのmainと言うWindowなら
    top.main.location.reload();
    新しく作ったmainと言うWindowなら
    main.location.reload();
    でよいです

    ここで注意しなくてはいけないのは、Reloadのサイトが、Reloadメソッドのあるドメインと同じでなくてはいけないことです

    サイトが違うと、5.01SP2以降のバージョンのIEでは異なるドメイン間でのJavaScriptによるコントロールが禁止されているので「書き込みできません」と言うエラーになってしまいます
    http://nifberry.727.net/test/hatena132/hatena132.htm

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません