|
■No17271 (凪瀬 さん) に返信
> まず、どういう操作をしたらどういう挙動をした、という正確な情報を集めてください。
> この際に、実験手順としてはノイズが入ることを防ぐためにも単純化することが望ましい
了解です。
午前中だけ掲示板にレスを返せる環境にありますが、作業場所ではリードオンリーで歯がゆいです;
showModalDialog session
で検索したところ、なにやら不具合っぽいのがなんとなく分かりましたが、当方の現象に関連する
ものかどうかはちょっと怪しい、気もします。
http://support.microsoft.com/kb/196383/ja
これも既に直っている(軽減という言い方かな)?らしいのですが、これが開いた先じゃなくて
開いた元のセッションが切れてしまうことに繋がるのかは文面からは読み取れませんでした。
-----------
-----------
//呼び出し側 JSP の onload に仕込む。
<script>
window.attachEvent("onload", function (oButton, oForm, callbackFunc) {
oButton.onclick = function() {
var arr = [];
for (var i=0;i < oForm.elements.length;i++) {
arr.push( oForm.elements[i].cloneNode(true));
//select-one , radio , check はもう少し複雑ですが、ここでは省略
}
var params = [];
params.param = arr;
params.method = "POST";
params.action = "http://同じドメイン/servlet/xxx.class";
var rets = showModalDialog("dummy.html",params, "dialogWidth:400px;dialogHeight:600px;");
if (!callbackFunc) {
alert(rets);
}
else {
callbackFunc(rets);
}
return false;
};
}(document.getElementById("xxxButton"), document.forms[0], function(rets) {
var s = [];
for (var a in rets) {
s.push( a + "=>" + rets[a]);
}
alert(s.join("\n"));
}));
</script>
//dummy.html の<head> 直下に以下の<base>タグを記述
<base target="_self" />
//dummy.html の onload に仕込む
<script>
window.attachEvent("onload", function() {
var arg = dialogArguments;
var fom = document.createElement("form");
fom.action = arg.action;
fom.method = arg.method;
for (var i=0;i < arg.param.length;i++) {
var hid = document.createElement("input");
hid.type = "hidden";
hid.name = arg.param[i].name;
hid.id = arg.param[i].id;
hid.value = arg.param[i].value;
//select-one , radio , check はもう少し複雑ですが、ここでは省略
fom.appendChild(hid);
}
document.body.appendChild(fom);
setTimeout(function() { document.forms[0].submit(); }, 100);
});
</script>
//dummy.html でポストしたコントロールサーブレットが返す JSP の中で
<script>
var retVal = [];
retVal.result = "CANCEL";
window.returnValue = retVal;
function closeDialog() {
retVal.result = "OK";
retVal.NAME = document.forms[0].NAME.value;
retVal.ADDR = document.forms[0].ADDR.value;
window.returnValue = retVal;
self.window.close();
}
</script>
|