簡單地說,因為MS09-054,發布KB974455,在此更新中微軟讓VBScript以前常用的一個DHTML技巧showModalDialog不再具有Array的returnValue,只能有單值的returnValue。請參考MSDN上的討論
Update : KB976749有描述這個問題,在KB976749應該解決了,所以下列解法僅供參考。
其實我完全沒在用VBScript,也不會寫VBScript,但是因為身為
倒楣
網管每次有一些不相容的東西都被主管塞給我做
自告奮勇解決,所以這次某舊系統的相容性又交由小弟處理。
解決方法:
測試頁面:
測試Dialog頁面
Update : KB976749有描述這個問題,在KB976749應該解決了,所以下列解法僅供參考。
其實我完全沒在用VBScript,也不會寫VBScript,但是因為身為
倒楣
網管每次有一些不相容的東西都
解決方法:
- 反安裝patch,再利用WSUS/SMS設定不要下載,這防不到user自行update
- 把return value改成單值,如MSDN上的方法,我個人覺得很麻煩
- 偷偷地把值塞到window.opener裏,同樣要改不少code
- 改成JavaScript,經過在下測試,IE的JavaScript仍然能夠傳回Array,並且在Firefox 3.5與Chrome都能正常執行(傑克,這真是太神奇了)。雖然也是麻煩,但似乎一勞永逸。
測試頁面:
<!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>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>測試Modal Dialog傳回Array</title>
<script language="javascript" type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js">
</script>
</head>
<body>
<script language="javascript" type="text/javascript">
function b(){
var y = window.showModalDialog("x.htm", "Arguments", "dialogHeight: 200px; dialogWidth: 200px; dialogTop: 10px; dialogLeft: 10px; edge: Raised; center: Yes; help: Yes; resizable: Yes; status: Yes;");
if (y == null) {
$('#theReturnValue').val('無傳回值');
}
else if (jQuery.isArray(y)) {
var str=y[0];
for(var i=1; i<y.length; i++)
{
str += ', '+y[i];
}
$("#theReturnValue").val('傳回長度為'+ y.length+'的陣列:'+str);
}
else {
$('#theReturnValue').val('傳回值非陣列:'+y);
}
}
</script>
<form id='form1' method='post' action=''>
<div>
測試Modal Dialog傳回Array
</div>
傳回值:<input type='text' value='' id='theReturnValue'/ readonly><input type='button' onclick='b();' value='test' />
</form>
</body>
</html>
測試Dialog頁面
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Modal Dialog</title>
</head>
<body>
<script language="JavaScript" type="text/javascript">
function testWinReturn() {
var sArr = [];
sArr[sArr.length] = '1';
sArr[sArr.length] = '2';
sArr[sArr.length] = '3';
window.returnValue=sArr;
this.close();
}
function retOneValue(){
window.returnValue=6;
this.close();
}
</script>
<form name="form1" method="post" action="" id="form1">
<div>我是Modal Dialog</div>
<div><input type='button' value='回傳陣列' onclick='testWinReturn();' /></div>
<div><input type='button' value='回傳單值' onclick='retOneValue();' /></div>
</form>
</body>
</html>
留言