IEのセキュリティ設定による空白画面表示

[新着] Webテンプレートを仮オープンしました



0   名前: YM : 2006/08/18(金) 17:51  ID:LeX6FzbW
画面上から、「Aシステム」というボタンをクリックすると、
javascriptが呼ばれて、
新たにwindowがopenされるのですが、
客先のIEのセキュリティ設定で、
「暗号化されていないフォームデータの送信」
という項目の、"ダイアログを表示"を選択していると、
空白画面が前面に表示され、その画面の裏側に
「暗号化されていないフォームデータの送信」
のダイアログが表示されてしまいます。
そこでOKを選択してはじめて空白画面から、
Aシステムの画面に遷移するというつくりになっています。

セキュリティの設定を変更することはできないらしく、
プログラム上で、
この空白画面がダイアログの裏に表示されるように
なんとか対応できないものかと依頼をうけまして・・・。
formをsubmitするタイミングをなんとかしたら
できるのかもしれませんが・・。
調べたのですがやり方がわかりません。

一応ソースを送ります。。。

★フォーム側(ボタン表示)

htp.p('<TABLE ALIGN=CENTER BORDER="0">');
htp.p('<TR>');
htp.p('<TD WIDTH="10%"></TD>');
url_str :='http://10.1.7.111/B843/B8F43S02.B8F43S02_MAIN'; --画面遷移先URL
name_str :='keihi'; --フォーム名
htp.p('<TD ALIGN=CENTER VALIGN=center>');
htp.formOpen(url_str, 'POST', name_str);
htp.formHidden('in_name_kj', in_name_kj);
htp.p('<INPUT TYPE="submit" NAME="IN_SUB" VALUE="Aシステム" onClick="return nbmsg5('''||name_str||''')">');
htp.formClose;
htp.p('</TD>');
htp.p('</TR>');
htp.p('</TABLE>');

★javascript(呼び出され側)

function nbmsg5(name_str){
browName = navigator.appName;
browVer = parseInt(navigator.appVersion);
var msg;
msg = "もう一つのブラウザ(インターネット閲覧ソ\フト)を\n";
msg += "起動します。\n";
msg += "OKボタンをクリックして\下\さい。\n";
alert(msg);
if (browVer >= 3) //Netscape対応
{
second=window.open("",name_str,"toolbar=no,status=yes,location=no,menubar=yes,resizable=yes,scrollbars=yes,alwaysRaised=yes,left=120,top=50");
second.focus();
}
return true;
}

1   名前: m035 ◆Wpzr1YKOiq : 2006/08/18(金) 17:51  [URL]  ID:6D2htUvn
second.focus();
を消すか、タイマー処理で時差をつけるとどうでしょう。

それと、JavaScriptを使わず、formにtarget="_blank"を指定するのは駄目なんでしょうか?
POSTならアドレスバーが表示されても問題ないはずですし・・・

2   名前: YM : 2006/08/18(金) 17:51  ID:LeX6FzbW
同じ画面内に別のform・・・・/formの記述が
あり、それぞれに別の名前をつけて、複数画面を起動させ、
操作できるようにしたいのです。なので
target="_blank"だとそれができないのでは・・・。
あと、スクロールバー等も非表示の状態で画面をOPENしたいです。

やりたいことをまとめると、
@セキュリティダイアログが最前面にでるようにしたい
AセキュリティダイアログでOKをクリックした後で、
 遷移先URLの画面に切り替わった状態で前面に表示させたい 
B表示の大きさや、スクロールバー等の設定は基本そのままで・・・
 (多少の表示位置変更は可)

よろしくおねがいします。


3   名前: m035 ◆Wpzr1YKOiq : 2006/08/18(金) 17:51  [URL]  ID:6D2htUvn
>second.focus();
>を消すか、タイマー処理で時差をつけるとどうでしょう。
こっちは駄目でしたか?
最低、second.focus()を消せば出来そうな気がします。

4   名前: YM : 2006/08/18(金) 17:51  ID:LeX6FzbW
フォーム側の、

htp.p('<INPUT TYPE="submit" NAME="IN_SUB" VALUE="Aシステム" onClick="return nbmsg5('''||name_str||''')">');

の文の、onclick・・・を下記のように変更したのですが、
構文エラーとなってしまいます。
記述に誤りがあるのでしょうか・・・?

htp.p('<INPUT TYPE="submit" VALUE=' || c1.menu_2_hyoji || ' onClick="setTimeout("return nbmsg3('''||name_str||''')",1000)">');

また、second.focus();
をコメントアウトしても、同じ様に前に出てきてしまいます。。





5   名前: m035 ◆Wpzr1YKOiq : 2006/08/18(金) 17:51  [URL]  ID:6D2htUvn
セキュリティ警告が親ウィンドウのモーダルダイアログになっていると言うことなら、
second.focus();

window.focus();
にしてみると言うのはどうでしょう。

6   名前: sevi- : 2006/08/18(金) 17:51  ID:pKAWj1cb
以下のようにすれば良いのではなかろうか.

sevi-

second=window.open("",name_str,"toolbar=no,status=yes,location=no,menubar=yes,resizable=yes,scrollbars=yes,alwaysRaised=yes,left=120,top=50");
second.blur();
//second.focus();
second.document.body.onbeforeunload=function(){second.focus();};

7   名前: YM : 2006/08/18(金) 17:51  ID:LeX6FzbW
お返事遅れてしまいすみません

m035さん

window.focus();
にしても、window.openで開いた画面が背後にでてきてしまいます・・・

sevi-さん

second.document.body.onbeforeunload=function(){second.focus();};
はNULLまたはオブジェクトではありません
というエラーがでてきてしまいます・・・

記述に誤りがあるのでしょうか??



8   名前: sevi- : 2006/08/18(金) 17:51  ID:PQukhZTw
エラーについて:
空白用に用意したドキュメントが全て読み込まれる前にbodyに接続しようとした段階で
エラーが生じているのだと思われる.

なので、nbmsg5関数内を以下のように修正しもう一度試して見て欲しい.

sevi-

function nbmsg5(name_str)
{
	browName = navigator.appName;
	browVer = parseInt(navigator.appVersion);
	var msg;
	msg = "もう一つのブラウザ(インターネット閲覧ソ\フト)を\n";
	msg += "起動します。\n";
	msg += "OKボタンをクリックして\下\さい。\n";
	alert(msg);
	if (browVer >= 3) //Netscape対応
	{
		second=window.open(
			"",
			name_str,
			"toolbar=no,status=yes,location=no,menubar=yes,resizable=yes,scrollbars=yes,alwaysRaised=yes,left=120,top=50"
		);
		second.focus();
		if(browName.indexOf("Internet Explorer") > -1)
		{
			second.blur();
			function check_second_readystate()
			{
				if(second.document.readyState == "complete")
					second.document.body.onbeforeunload=function(){second.focus();};
				else
					setTimeout(check_second_readystate, 1);		
			}
			check_second_readystate();
		}
	}	
	return true;
}

9   名前: YM : 2006/08/18(金) 17:51  ID:LeX6FzbW
sevi-さん

ありがとうございます。
上記の記述文を直接コピーペーストし、試したところ
アクセスが拒否されましたとエラーがでます・・・。
該当の行は

・・・
if (browVer >= 3) //Netscape対応
{
・・・・
・・・・
の、”{”の行で発生しているようです
ちなみに、
if(browName.indexOf("Internet Explorer") > -1)
は、javascript対応の記述ですか?



10   名前: sevi- : 2006/08/18(金) 17:51  ID:PQukhZTw
外部ウインドウに展開側ウインドウより操作を行う際エラーが出ているのかもしれない.
では、始めに表示させる空白画面用の文書blank.htmlを別途用意すれば良いと考える.
以下のように修正してもう一度試して欲しい.

空白文書のスクリプトでは、ロケーション変移の直前にwindow.focus()メンバを実行するように
指定している.
これにより、空白ページから実際に内容が実装されたページに移動が始まる直前
(自動で発生するForm送信確認のダイアログボックス表示、OKボタン押下直後)に
事前にsecond.blur()でメインウインドウより背後に隠したsecondウインドウが最前面に出てくる
筈である.

尚、指摘の箇所は問題がIE上で発生するとのことなのでIE以外は必要ないので実行しないよう
条件文で囲んだだけである.

sevi-

function nbmsg5(name_str)
{
	browName = navigator.appName;
	browVer = parseInt(navigator.appVersion);
	var msg;
	msg = "もう一つのブラウザ(インターネット閲覧ソ\フト)を\n";
	msg += "起動します。\n";
	msg += "OKボタンをクリックして\下\さい。\n";
	alert(msg);
	if (browVer >= 3) //Netscape対応
	{
		second=window.open(
			"blank.html",
			name_str,
			"toolbar=no,status=yes,location=no,menubar=yes,resizable=yes,scrollbars=yes,alwaysRaised=yes,left=120,top=50"
		);
		second.focus();
		if(browName.indexOf("Internet Explorer") > -1)
		{
			second.blur();
		}
	}	
	return false;
}

blank.html
-------------------
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title></title>
</head>
<body onbeforeunload="window.focus();">

</body>
</html>

11   名前: YM : 2006/08/18(金) 17:51  ID:LeX6FzbW
無知識ですみません

blank.html
-------------------
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title></title>
</head>
<body onbeforeunload="window.focus();">

</body>
</html>
の記述はどこに書けばいいのでしょう・・・?

12   名前: sevi- : 2006/08/18(金) 17:51  ID:PQukhZTw
どこに書く、のでなく、別途HTML文書(ファイル名blank.html)として同じ階層に用意する.
(ファイルとして配置できないならPHPで出力させる形にしても良い)

sevi-

13   名前: YM : 2006/08/18(金) 17:51  ID:LeX6FzbW
同じ階層とは、このプログラムと同じ場所ということですか?
現在このプログラムはオブジェックトブラウザ上でみているのですが・・
この場合はサーバにSQLファイルがあるのでしょうか?

14   名前: sevi- : 2006/08/18(金) 17:51  ID:PQukhZTw
★フォーム側(ボタン表示)

htp.p('<TABLE ALIGN=CENTER BORDER="0">');
htp.p('<TR>');
htp.p('<TD WIDTH="10%"></TD>');
url_str :='http://10.1.7.111/B843/B8F43S02.B8F43S02_MAIN'; --画面遷移先URL
name_str :='keihi'; --フォーム名
htp.p('<TD ALIGN=CENTER VALIGN=center>');
htp.formOpen(url_str, 'POST', name_str);
htp.formHidden('in_name_kj', in_name_kj);
htp.p('<INPUT TYPE="submit" NAME="IN_SUB" VALUE="Aシステム" onClick="return nbmsg5('''||name_str||''')">');
htp.formClose;
htp.p('</TD>');
htp.p('</TR>');
htp.p('</TABLE>');


このコードを吐くCGIと同じ階層にHTML文書ファイルとして配置もしくは内容を吐くCGIとして配置するという事なのだが.
解らなければ社内(かな?)のWeb技術者等、詳しい人に聞いて欲しい.

もっと単純に解決したいのなら、

url_str :='http://10.1.7.111/B843/B8F43S02.B8F43S02_MAIN'; --画面遷移先URL

上記画面遷移先URLが指す場所に配置した文書にjavascriptで読み込み完了時window.focus();メソッドを呼び出すように
すれば良い.

sevi-

一覧へ戻る