- PR -

ウィンドウの制御について

投稿者投稿内容
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-10-11 22:17
 ユーザインターフェイスを考えるときは、実際に操作する人のことを考えましょう。

 「すでにウインドウが存在しているなら、メッセージを出して、新しいウインドウは出さない」という仕様ですね。では、
「すでにウインドウが存在しているのに、新しいウインドウを出そうとしている状況」
とは、どんなものでしょうか。

 もし、対象のウインドウが一目見てわかる位置に、それだとわかるように存在しているなら、おそらくそれを再利用すると思います。ということは、他のウインドウに隠れているなど、一目でわからない状況にある、ということが想像できます。
 このときに、「すでに表示されています」というメッセージが出たとして、ユーザはどう思うでしょう?

 ところで、「制御できない」って、どういうことでしょう?
手元の Web アプリでやると、子を表示して親を消し、もう一度親を出して子を表示するアクションをすると、特に表示上の変化はありませんね。
で、子から親への値渡しをしようとすると、親へ値が渡りませんでした。
おそらく、opener が閉じた親を指しているのでしょう。
ん〜、、、どうしましょうねぇ。
子を表示中に親がリロードすることがないなら、unload で保持している子を消す、というアクションが、ユーザに優しいと思いますけど。

_________________
Java人
ベテラン
会議室デビュー日: 2005/06/24
投稿数: 94
投稿日時: 2006-10-12 09:59
引用:

Jittaさんの書き込み (2006-10-11 22:17) より:
 このときに、「すでに表示されています」というメッセージが出たとして、ユーザはどう思うでしょう?


設計者がC/Sの考えを根底に話をするんです。
なので、「すでに表示されています」などのメッセージを表示してほしいなぁと・・・
私どもは委託なので実現可否を調査するだけで、決定権は向こうにあるので
従うことしかできないつらい立場なんです。

引用:

Jittaさんの書き込み (2006-10-11 22:17) より:
 ところで、「制御できない」って、どういうことでしょう?
手元の Web アプリでやると、子を表示して親を消し、もう一度親を出して子を表示するアクションをすると、特に表示上の変化はありませんね。
で、子から親への値渡しをしようとすると、親へ値が渡りませんでした。
おそらく、opener が閉じた親を指しているのでしょう。
ん〜、、、どうしましょうねぇ。
子を表示中に親がリロードすることがないなら、unload で保持している子を消す、というアクションが、ユーザに優しいと思いますけど。


例えば子ウィンドウで何らかの入力を行った上で、もう一度親を出して子を表示するアクションをするとどうなりますでしょうか?
私の経験では入力内容がすべて消されたと思うのですが・・・
設計者からはそのような動きにはしたくないらしいです。
でっち6号
大ベテラン
会議室デビュー日: 2005/01/31
投稿数: 176
お住まい・勤務地: Kawasaki
投稿日時: 2006-10-12 11:21
とりあえずJavaScriptでこんなことはできます。

コード:
//Window名を指定して、一旦ブランクページを開く
var win = window.open("","subWindow");
if (win.location.href == "about:blank"){
	//まだ開いていないので、本来の画面で開きなおす
	win = window.open("Hoge.htm","subWindow");
}
else{
	alert("既に開いています。");
}



既に開いているWindowに対して、第1引数を指定せずにOpenするとリロードは行われません。
書いておいて何ですが、ブラウザに対する依存が大きいのであんまりオススメはしません。
わかってる範囲ですとSSLサイトで警告が出るという問題もあります。
あと、別スレでノートンがポップアップをブロックするってのも見た記憶が...
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-10-12 22:59
引用:

Java人さんの書き込み(2006-10-12 09:59)より:
設計者がC/Sの考えを根底に話をするんです。
なので、「すでに表示されています」などのメッセージを表示してほしいなぁと・・・
私どもは委託なので実現可否を調査するだけで、決定権は向こうにあるので
従うことしかできないつらい立場なんです。


メインフレームとか汎用機かな?
心中お察しいたします。。。
 ただ、その考えを、そのままパーソナルコンピュータ、特に Web アプリには持って来れないですよね。
例えば、「リターンキーでフォーカス移動」は、絶対に出来ません。[Return]キーは存在しませんから(ゴメン
そのことは、設計者さんもご存じなのでしょうか。
引用:

ご参考:
 昔、操作方法が「今までのままでいい」というシステムを納めたのですが、設計時と納入時で担当者が変わっており、納入時の担当者に「なんでこんな使いにくい仕様なんですか」と、詰問されたことがあります。




引用:

例えば子ウィンドウで何らかの入力を行った上で、もう一度親を出して子を表示するアクションをするとどうなりますでしょうか?
私の経験では入力内容がすべて消されたと思うのですが・・・


確認しました。おお、テスト ケース抜けだ。。。

でっち6号さんのコードをお借りします。
コード:
//Window名を指定して、一旦ブランクページを開く
var win = window.open("","subWindow");
if (win.location.href.match(/Hoge.htm$/)) {
	alert("既に開いています。");
}
else{
	//まだ開いていないので、本来の画面で開きなおす
	win = window.open("Hoge.htm","subWindow");
}


IE7、Opera9 で、期待通りの動きをします。FireFox が。。。
FireFox の場合、名前が有効じゃないですね。新しいタブが、必ず開いてしまいます。

_________________
Java人
ベテラン
会議室デビュー日: 2005/06/24
投稿数: 94
投稿日時: 2006-10-13 18:01
でっち6号様、Jitta様 ありがとうございました。

2重起動制御が出来ました。

> ただ、その考えを、そのままパーソナルコンピュータ、特に Web アプリには持って来>れないですよね。
>例えば、「リターンキーでフォーカス移動」は、絶対に出来ません。[Return]キーは存在しませんから(ゴメン
>そのことは、設計者さんもご存じなのでしょうか。
上記の事はプロジェクト開始直後からず〜っと言っています。
ただ、言葉の端々に「VBでの言うところのこういう動きはできる?」と聞かれます。
安直に「できません」と言いたい所ですが、出来ない理由を理解してもらうために
サンプルで出来ない事を証明するしかないんです。

すご〜く苦労しています。

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