- - PR -
ブラウザ二重起動防止にlocation.hrefを使用してますが・・
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-12-21 09:15
はじめまして、すみと申します。
以下のサイトでも質問したのですが、回答をいただけなかったので こちらでも質問させていただきました。 マルチポストになってしまうので管理人様のご判断で削除いただいても結構です。 http://oshiete1.goo.ne.jp/qa2588389.html ↓以下質問内容です↓ JavaScriptでブラウザの二重起動を防止するために location.hrefを使用していますが、 ここ2週間前くらいからlocation.hrefのところで 「書き込みできません」のエラーが発生するようになってしまいました。 IEのセキュリティが変わったりしたのでしょうか? もしlocation.hrefが使用できないようなら、 他に二重起動を防止するような方法をご存知のかたいらっしゃいましたらご教授下さい。 以下環境・処理の詳細です。 -----環境----- OS:WindowsXP SP2 IE:6.0 -----アプリケーションの起動時の動き----- (1)index.htmlを起動する (2)起動すると自動でindex.htmlからアプリ本体を別ブラウザで起動し index.htmlは自分自身を閉じる index.htmlのonLoadで以下のような関数をよんで アプリの起動と二重起動チェックを行っています。 function start() { x = (screen.width - wx) / 2; y = (screen.height - wy) / 2; Win = window.open("","hoge","left=0,top=0,width=0,height=0"); //hogeという名前のウィンドウがすでに開いているかどうかをURLの表示で判断している。 if(Win.location.href == "about:blank"){ Win.close(); Win = window.open("","hoge","left="+x+",top="+0+",width="+wx+",height="+wy+",resizable=yes, directories=no, location=no, menuber=no, scrollbars=yes, status=no, toolbar=no"); document.frm.submit(); Win.focus(); }else{ Win.focus(); } window.opener=self; window.close(); } よろしくお願いいたします。 | ||||
|
投稿日時: 2006-12-22 23:56
はじめまして、すみさん。
window.openでURLに、""を指定しているみたいですが index.htmlのサイトの適当なURLを呼び出すことは可能ですか。 たぶん、""のURLにアクセスする際にセキュリティがかかっているのが 原因なのではないかと思います。 | ||||
|
投稿日時: 2006-12-25 13:20
けんにゃんさん、ご返信ありがとうございます。
>window.openでURLに、""を指定しているみたいですが >index.htmlのサイトの適当なURLを呼び出すことは可能ですか。 せっかくご指摘いただいたのですが、 「document.frm.submit();」で指定のサーブレットに飛ばし、 そのサーブレットで遷移先URLを指定しているため JavaScript側でURLを直に指定することができません・・・・。 情報の小出しになってしまって申し訳ありません・・・。 もし他にご存知でしたらご教授いただければと思います・・・。 よろしくお願いいたします。 | ||||
|
投稿日時: 2006-12-26 00:57
こんばんは。
少し言葉が足りなかったかもしれません。 添付していただいているソースの初めのwindow.openで ウインドウの有無を調べようとしていますよね。 そのURLが、””なので他人のサイトを覗くことに なるため、アクセス違反になると思います。 なので、ここに自分のサイトの適当な(遷移先ではない)URLを 書くことが可能ならばアクセス違反にならないということです。 | ||||
|
投稿日時: 2006-12-27 10:19
けんにゃんさん。
何度もありがとうございます。 >ここに自分のサイトの適当な(遷移先ではない)URLを >書くことが可能ならばアクセス違反にならないということです。 遷移先でなくてもよいということだったんですね、こちらの解釈が間違っておりました。 ですが、遷移先でなくともサイト内のURLを直指定するのはやはり難しそうです・・。 何度も書き込みいただいたのに申し訳ないです。 他の方法がないか探してみます、何度もありがとうございました。 | ||||
|
投稿日時: 2006-12-27 10:32
iframeだとsrc="javascript:false"なんてこともできるんですが、window.open()はどうなんだろう…。
loadでcookieを吐いておくとか、サーバ側で認証IDやリモートホストを取っておくとかでも良さそうな。 | ||||
|
投稿日時: 2006-12-27 23:57
こんばんは。
逆転の発想で考えてみました。 エラーが起きるのはアプリが未起動の場合であり、エラーが起きないのは アプリが起動している場合である。という前提で考えると try{}catch(e){}でエラーを拾う。または、onerrorでエラーを拾う。という のは、どうでしょう。以下のような感じです。 try{ Win = window.open("","hoge","left=0,top=0,width=0,height=0"); //hogeという名前のウィンドウがすでに開いているかどうかをURLの表示で判断している。 if(Win.location.href == "about:blank"){ //アプリ起動 }else{ Win.focus(); } } catch(e) { //アプリ起動 } | ||||
|
投稿日時: 2006-12-28 02:08
ちなみにこのアプリ、IE6以前のバージョンが前提でしょうか?
IE7にも対応するとなるとこのロジックはまずいっすよ。 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=35644&forum=3&start=8
|