- PR -

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

投稿者投稿内容
みす
会議室デビュー日: 2005/09/01
投稿数: 11
投稿日時: 2006-12-28 16:10
たくさんご返答いただきありがとうございます。
・・かなりあきらめモードになっているところです・・。

mioさん>
>loadでcookieを吐いておく
>サーバ側で認証IDやリモートホストを取っておく
本当はサーバー側で対応を行っておくべきだったとは今になって思います。
ただ、納期の関係上あまり時間がかけられないため、
今の段階ではサーバー側を修正するのは厳しい状況です・・・。

けんにゃんさん>
何度も本当にありがとうございます。

エラーハンドリングして・・というのも試していたのですが
「書き込みできません」のエラーが発生しない環境もあり
(上記の場合、すでにあがっているアプリを強制的に終了してしまい、
 二回目に起動したアプリもあがらない)
その違いを調査しないといけないと思っているところです・・。

再現性がないのであればまだこの方法ではいけないかな・・と考えています。

>ぼのぼのさん
今のところIE6のみという前提です。

ただ、将来的にIE7でも使用するとなれば別途対応が必要になる認識はあります。
本当は今のうちに対応しておくべきとは思いますが、
時間的に厳しいため、とにかく現状で動作することを先に考えております。

たくさんご意見をいただいたのにわがままばかりで申し訳ありません。
私ももう少し調査したいと思います。
ありがとうございました。
ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 2006-12-29 02:31
IE6のみでおkということなのでもすこしねばってみましょうか。

引用:

みすさんの書き込み (2006-12-28 16:10) より:
エラーハンドリングして・・というのも試していたのですが
「書き込みできません」のエラーが発生しない環境もあり
(上記の場合、すでにあがっているアプリを強制的に終了してしまい、
 二回目に起動したアプリもあがらない)
その違いを調査しないといけないと思っているところです・・。


私の認識が間違っていなければ、エラーが発生しないのは
openしたwindowで開いているのが自サイト内(URLのドメインが同じ)のときです。
#もしくはIEのバージョンが古くセキュリティの脆弱性が残っているか。
#手元に古いIEの環境がないのでこちらの可能性は確信がありません。

引用:

けんにゃんさんの書き込み (2006-12-27 23:57) より:
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)
{
  //アプリ起動 ←※
}


従って、※のとこは間違ってます。
エラーになるってことは、子画面が既に開いており他サイトを開いていることになるので、
ここではWin.focus();が正しいかと。

一応ミニマムコードの検証用HTMLをつくってみました。参考になれば幸いです。

コード:

<html>
<head>
<script type="text/javascript">
function testFunc() {
    w = window.open("","hoge");
    try {
        if(w.location.href == "about:blank") {
            w.location.href = "http://www.goo.ne.jp";
        } else {
            w.focus();
        }
    } catch(e) {
        w.focus();
    }
}
</script>
</head>
<body>
<input type="button" value="yahoo" onclick="window.open('http://www.yahoo.co.jp', 'hoge')">
<input type="button" value="自サイト" onclick="window.open('./test2.html', 'hoge')">
<input type="button" value="testFunc" onclick="testFunc()">
</html>

みす
会議室デビュー日: 2005/09/01
投稿数: 11
投稿日時: 2007-01-24 19:52
返信が遅くなってしまい大変申し訳ありません。(別の作業に追われておりました・・)

>ぼのぼのさん
検証コードまでご提供いただいてありがとうございました。
皆さんのご意見や、いただいた検証コードを使って色々と試してみたところ、
エラーハンドリングを行う方法で二重起動抑止ができるようになりました、ありがとうございました。

で、前の投稿で以下の書き込みをさせていただいたのですが
----------------------------------------------------------------
エラーハンドリングして・・というのも試していたのですが
「書き込みできません」のエラーが発生しない環境もあり
(上記の場合、すでにあがっているアプリを強制的に終了してしまい、
 二回目に起動したアプリもあがらない)
----------------------------------------------------------------
この原因がデスクトップ上のショートカットから二重起動した場合でした。
ショートカットからの起動時はすでにあるIEのインスタンスを使いまわすため
上記の現象が起きたようです。

実際の運用としてはショートカットから起動のパターンになるようなので
ショートカットから起動した場合に強制的に終了しない方法を
また別途調査したいと思います。

本当にありがとうございました。

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