- PR -

ブラウザ二重起動防止にlocation.hrefを使用してますが・・

投稿者投稿内容
みす
会議室デビュー日: 2005/09/01
投稿数: 11
投稿日時: 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/21
投稿数: 4
投稿日時: 2006-12-22 23:56
はじめまして、すみさん。
window.openでURLに、""を指定しているみたいですが
index.htmlのサイトの適当なURLを呼び出すことは可能ですか。
たぶん、""のURLにアクセスする際にセキュリティがかかっているのが
原因なのではないかと思います。
みす
会議室デビュー日: 2005/09/01
投稿数: 11
投稿日時: 2006-12-25 13:20
けんにゃんさん、ご返信ありがとうございます。

>window.openでURLに、""を指定しているみたいですが
>index.htmlのサイトの適当なURLを呼び出すことは可能ですか。

せっかくご指摘いただいたのですが、
「document.frm.submit();」で指定のサーブレットに飛ばし、
そのサーブレットで遷移先URLを指定しているため
JavaScript側でURLを直に指定することができません・・・・。
情報の小出しになってしまって申し訳ありません・・・。

もし他にご存知でしたらご教授いただければと思います・・・。
よろしくお願いいたします。
けんにゃん
会議室デビュー日: 2006/12/21
投稿数: 4
投稿日時: 2006-12-26 00:57
こんばんは。
少し言葉が足りなかったかもしれません。
添付していただいているソースの初めのwindow.openで
ウインドウの有無を調べようとしていますよね。
そのURLが、””なので他人のサイトを覗くことに
なるため、アクセス違反になると思います。
なので、ここに自分のサイトの適当な(遷移先ではない)URLを
書くことが可能ならばアクセス違反にならないということです。
みす
会議室デビュー日: 2005/09/01
投稿数: 11
投稿日時: 2006-12-27 10:19
けんにゃんさん。
何度もありがとうございます。

>ここに自分のサイトの適当な(遷移先ではない)URLを
>書くことが可能ならばアクセス違反にならないということです。

遷移先でなくてもよいということだったんですね、こちらの解釈が間違っておりました。
ですが、遷移先でなくともサイト内のURLを直指定するのはやはり難しそうです・・。

何度も書き込みいただいたのに申し訳ないです。
他の方法がないか探してみます、何度もありがとうございました。

mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2006-12-27 10:32
iframeだとsrc="javascript:false"なんてこともできるんですが、window.open()はどうなんだろう…。

loadでcookieを吐いておくとか、サーバ側で認証IDやリモートホストを取っておくとかでも良さそうな。
けんにゃん
会議室デビュー日: 2006/12/21
投稿数: 4
投稿日時: 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)
{
  //アプリ起動
}
ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 2006-12-28 02:08
ちなみにこのアプリ、IE6以前のバージョンが前提でしょうか?
IE7にも対応するとなるとこのロジックはまずいっすよ。

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=35644&forum=3&start=8

引用:

じゃんぬねっとさんの書き込み (2006-12-20 10:13) より:

JavaScript を使われているのであれば、その他こまごまと...
  • ステータス バーへの出力が不可能になった
  • window.open() で、URL 欄が表示されるようになった
  • window.open() で、フル スクリーン表示が禁止になった
  • window.close() で、確認メッセージが必ず表示されるようになった
    (以前は、opener に入っている値によって表示しないようにすることが可能だった)
  • クリップボードへの一定の操作で警告メッセージが表示される
    (IE6 にも設定はありましたが、デフォルトでは表示しない設定になっていたハズ)
  • prompt() が一時的にブロックされるようになった
他にもあるかもしれませんが、参考になれば幸いです。

スキルアップ/キャリアアップ(JOB@IT)