JavaScriptで開くウインドウに関しての質問です。

リンクをクリックした際に、ウインドウの有無を確認させてください。なければ普通に開くよう、既に開いているならそのウインドウに表示されるようにしたいのです。
下記は現在のソースですが、これでは延々とウインドウが開いてしまいます。
できればソースを丸ごと書いていただけるとうれしいです。よろしくお願いします。

---HEAD---
<SCRIPT language=”JavaScript”>
<!--HPB_SCRIPT_CODE_40
// _HpbJumpURLinNewWindow: 新規ウィンドウを開いて指定したURLにジャンプします。
//
function _HpbJumpURLinNewWindow(url)
{
if (url != ’’)
{
window.open(url, ’_blank’,”scrollbars=yes,width=620,height=600,top=20”);
}
}
//--></SCRIPT>

---BODY---
<A onclick=”_HpbJumpURLinNewWindow(’01.htm’);” href=”javascript:void(0)”>01</A>

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答5件)

id:stnet No.1

回答回数804ベストアンサー獲得回数34

ポイント15pt

http://www.hatena.ne.jp/1122985043

人力検索はてな - JavaScriptで開くウインドウに関しての質問です。 リンクをクリックした際に、ウインドウの有無を確認させてください。なければ普通に開くよう、既に開いているならそのウ..

window.open(url, ’hoge’,”scrollbars=yes,width=620,height=600,top=20”);


変えた1行のみ示します

_blankのところを適当な名前に変更すれば良いかと

id:cepek

いいえ、違うのです。

この_blankはページ内のリンク個所を全て同じ大きさで開くためにこうしてあるので、ここをかきかえるとその適当な名前にしたものしか開かれなくなりますよね?それでは意味がないのです。

2005/08/02 21:36:39
id:ito-yu No.2

回答回数323ベストアンサー獲得回数14

ポイント15pt

http://www.red.oit-net.jp/tatsuya/java/winopen.htm

�C�k�ł��킩��JavaScript�u��

window.openの第2引数に「_blank」をしていすると、新しいウィンドウに開く、という意味になります。ですので、延々ウィンドwが開く…というのはあなたの指定したとおりの動作です。

で、答えは、ウィンドウの名前を指定して開く、です。以下の「hoge」のように。


window.open(url, ’hoge’,”scrollbars=yes,width=620,height=600,top=20”);

id:cepek

一番の方と同じ回答ですね。

ではHEAD部分を

<SCRIPT language=”JavaScript”></p> <p> <!--HPB_SCRIPT_CODE_40</p> <p> // _HpbJumpURLinNewWindow: 新規ウィンドウを開いて指定したURLにジャンプします。</p> <p> //</p> <p> function _HpbJumpURLinNewWindow(url) </p> <p> {</p> <p> if (url != ’’)</p> <p> {</p> <p> window.open(url, ’01.htm’,”scrollbars=yes,width=620,height=600,top=20”);</p> <p> window.open(url, ’02.htm’,”scrollbars=yes,width=620,height=600,top=20”);</p> <p> window.open(url, ’03.htm’,”scrollbars=yes,width=620,height=600,top=20”);</p> <p> }</p> <p> }</p> <p> //--></SCRIPT>

のようにすれば実現できると言うことでしょうか?

ちょっとやってみますね。

やってみましたがウインドウ自体が開かなくなってしまいました。失敗のようです。

2005/08/02 21:50:56
id:dungeon-master No.3

回答回数571ベストアンサー獲得回数40

ポイント20pt

http://www.hatena.ne.jp/ダミー:detail]

1番の方のやり方でいいと思います。


function _HpbJumpURLinNewWindow(url,windnam)

{

if (url != ’’)

{

window.open(url, winnam,”scrollbars=yes,width=620,height=600,top=20”);

}

}


としておけば、


<A onclick=”_HpbJumpURLinNewWindow(’01.htm’,’window01’);” href=”javascript:void(0)”>01</A>


のようにして、好きなWindow名に固定できます。

特定のURLどうしは同じWindowを共用するということもできますね。

id:cepek

さっそく書き換えて試してみたのですが上手く行きません。

リンク部分を書き換えたところは「ページが表示されません」になって、書き換えてないところは全く動かなくなりました。

うーん、これは無理なお願いだと言うことなのでしょうか……。

2005/08/02 22:01:41
id:obache No.4

回答回数31ベストアンサー獲得回数0

ポイント20pt

ウインドウ名に . が入っているとダメっぽいので、こんなのでどうでしょう?

既存のウインドウだと、ポップアップしてくれないので、forcusもしています。


<html>

<head>

<SCRIPT language=”JavaScript”>

<!--HPB_SCRIPT_CODE_40

// _HpbJumpURLinNewWindow: 新規ウィンドウを開いて指定したURLにジャンプします。

//

function _HpbJumpURLinNewWindow(url)

{

if (url != ’’)

{

win = window.open(url, url.replace(’.’, ’_’) ,”scrollbars=yes,width=620,height=600,top=20”);

win.focus();

}

}

//--></SCRIPT>

</head>

<body>

<A onclick=”_HpbJumpURLinNewWindow(’01.htm’);” href=”javascript:void(0)”>01</A>

</body>

</html>

id:cepek

スクリプト部分をコピーペーストして試してみたんですけど、ダメでした。新しいウインドウが開いてくれないです……。

2005/08/02 23:34:45
id:fraise No.5

回答回数368ベストアンサー獲得回数21

ポイント50pt

http://blog.livedoor.jp/

livedoor ブログ(Blog) - 無料/有料ブログ作成サービス

”_blank”の部分を”window1”にすると、

他にウィンドウが開いていなければ新規ウィンドウが、

既に開いているウィンドウがあればそちらに表示されるようになりますよ。

id:cepek

バッチリ上手くいきました!

どうもありがとうございます♪

2005/08/02 23:37:49
  • id:sqrt
    >スクリプト部分をコピーペーストして試してみたんですけど、

    はてなの解答欄では一部の半角記号が全角に変換されます。
    単純なコピーペーストで失敗したのでしたら、「”」と「’」が全角文字になっていたのではないでしょうか。
    私の手元では3の方の回答も4の方の回答も正しく動作しました。

    ……と、それはともかく、私には1の方の回答と5の方の回答の違いがよく分かりません。
    参考までに、よろしければ2つの違いを教えていただけないでしょうか。
    http://i.hatena.ne.jp/idea/2161
  • id:cepek
    分かってみると同じでした……

    >私には1の方の回答と5の方の回答の違いがよく分かりません。
    >参考までに、よろしければ2つの違いを教えていただけないでしょうか。

    今、色々試してみて理屈がわかると確かに同じアドバイスをいただいていました。でも最初に回答をもらった時点では’hoge’ってのはファイル名のことだと思ったんです(まさか本当にプログラムの中に適当な単語を入れてもいいなんて思いもしなかったので)
    なので、5の回答者の方の’window1’というそれらしい単語と説明で納得したんですね。分かってみると、1と2の回答者の方には申し訳ないことをしました。

    >私の手元では3の方の回答も4の方の回答も正しく動作しました。
    全角半角を書き換えてやってみたところ、3のほうは動きましたが4のほうはエラーが出て動きませんでした。4の回答の「既存のウインドウだと、ポップアップしてくれないので、forcusもしています」っての、意味はわかりませんがとてもいいことっぽいのに残念です。

    ちなみに今使っているPCはwin98のIE5.5です。
    プログラムの意味がわからないままやっているので、せっかくのアドバイスを理解できなかったということです。参考にならなくてごめんなさいね。
  • id:sqrt
    Re:分かってみると同じでした……

    返答ありがとうございます。
    私が確認に使ったのはwin2000のIE6なので、4の方のスクリプトが動かないのはブラウザのバージョンの違いのせいかもしれませんね。

    いえ、ふと妙に思ったもので「2つの違いを」などと愚にも付かない質問をしてしまいましたが、スクリプトの動作に違いがないということであれば(回答者の方々には失礼ながら)回答の分かりやすさに違いがあったということでしょうから、将来私が誰かに説明しなければならなくなった場合などにはぜひ参考にさせていただきたいと思います。

    focusについてですが、focusするとリンクをクリックした際にwindow.openで開かれたウィンドウがいつも前面に出てくるようになります(focusしないと、既に開かれたウィンドウを再利用する際、そのウィンドウが背面に隠れている場合には隠れたまま)。
    focusの方法は、↓のように最後に.focus();を追加するのが一番簡単でしょう。前面に出た方が使いやすい場合と出ない方が使いやすい場合があると思いますので、適切な方法をお選びください。

    window.open(url, ’window1’,”scrollbars=yes,width=620,height=600,top=20”).focus();
  • id:dungeon-master
    Re:分かってみると同じでした……

    >4の回答の「既存のウインドウだと、ポップアップしてくれないので、forcusもしています」っての、
    >意味はわかりませんがとてもいいことっぽいのに残念です。

    Window.focus()メソッドは、そのWindowが後ろに隠れているのを全面に持ってきてくれます。
    裏に隠れたままページが更新されても気が付かないことが多いので。

    4の方の回答ではURLからWindow名を作っていますが、Window名に使えない文字が入っていたのかもしれません。
    また、window.open()メソッドが返す新規Windowオブジェクトを変数winに格納してからfocusしていますが、
    直接 Window.open(〜).focus(); という風にも書けます。
    Window.open(〜)が返す返す新規Windowオブジェクトについてfocus()するという意味になります。
  • id:cepek
    (投稿者削除)

  • id:cepek
    ありがとうございます

    sqrtさん、dungeon-masterさんへ。
    このフォーカスの機能の説明ありがとうございます。これは便利ですね!
    いいことを知れてとても嬉しいです。感謝!

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

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

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

回答リクエストを送信したユーザーはいません