刚刚接手一个很老的ASP系统维护,以前的同事走的时候留下一个相当棘手的问题,我多方尝试也没有成功,特来此求教,闲话不表,我的问题如下:
功能场景:点击列表中的工单信息弹出一个工单的详细信息
问题:此功能在IE6,IE7和一部分IE8用户下没问题,但一部分IE8用户使用时浏览区弹出这么一个对话框“您正在查看的网页正在试图关闭窗口,您确定要关闭吗”,我点击是的话这个页面就关闭了,我点击否的话页面虽然在,但内容缺是空的(除了页面使用的背景图),由于原先的系统涉及到的代码有上千处,改代码不现实,因此我尝试了各种修改浏览器设置的方法,均为能解决这一问题,我尝试的方法有:
(1)点击兼容性视图,将目标网站添加到其中
(2)修改安全性—自定义级别中的脚本访问设置
(3) internet选项-高级 中的设置。再次真心求教大神或遇到过类似情况同仁们,如何通过除了修改代码和重装系统外的任何方法解决这一问题?
ps:我原先的IE(也是IE8)可以正常浏览(不知道是不是和我安装操作系统时安装的不是完全本有关),尽早我重装了IE8之后就报那个错误了。js代码如下
function ShowPage(str)
{
var o=parent.wLoader.correctPage(2)
var sRan="SHOWDETAIL"+parseInt(10000*Math.random())
if(parent.windowMSGDetail==null) parent.windowMSGDetail=[]
parent.windowMSGDetail[parent.windowMSGDetail.length]=parent.open("",sRan,"resizable=1,scrollbars=0,toolbar=0,location=0,left=50,top=50,width=700,height=400")
o.innerHTML+="<input type=hidden name='selectedRow' value='"+str+"'>"
+"<input type=hidden name='sID' value='"+parent.parent.document.all['__USER_ID'].value+"' />"
o.action="../Public/HandlePage.asp"
o.target=sRan
parent.document.body.onbeforeunload=function()
{
var oToClose=parent.windowMSGDetail
for(var i=0;i<oToClose.length;i++)
{
try { oToClose[i].close() } catch(exp) {continue}
}
}
o.submit()
}asp代码如下:
<%
var sDBOwner=Application("DBOwner")
var table=new Grid()
table.limit="distinct"
table.append("排放单号","A.ID",100)
table.append("罐号/系统号","B.BUCKET_NO",80)
table.append("液位/压力","B.LIQUT_ALTITUDE",100)
table.append("签发人","B.APPLY_USRID",60)
table.append("签发时间","TO_CHAR(B.APPLY_DATE,'YYYY-MM-DD HH24:MI')",140)
table.append("当前状态","C.Status_Info")
table.tables=sDBOwner + ".GREMS_STATUS A," + sDBOwner + ".GREMS_APPLY B," + sDBOwner+".GREMS_Status_Info C"
table.filter="A.ID=B.ID AND A.CURRENT_STATUS=C.CURRENT_STATUS"
table.rAttri="@onclick=ShowPage(^1^)"
table.sort="A.ID"
s=(""+Request.QueryString("s")).toUpperCase()
var sf
switch(s)
{
case "DEFAULT":
case "APP":sf=" < 16";break
case "SAM":sf="IN ('APP','ALS','AQT','SMP')";break
case "ANA":sf="IN ('ALS','CQT','ISA')";break
case "CHK":sf="IN ('ISA','WQT')";break
case "COM":sf="IN ('CHK','CQT','RLS')";break
case "CM2":sf="IN ( 'CFM','RLS')";break
case "RLS":sf="IN ('RLS','PUS','HLT','RLG')";break
default:
Response.Clear()
Response.End()
}
var sFlag
if(s == "APP"||s =="DEFAULT") sFlag="C.Status_NO"
else sFlag="A.CURRENT_STATUS"
table.filter += " AND "+sFlag+" "+sf
table.Build()
table=null
%>
功能场景:点击列表中的工单信息弹出一个工单的详细信息
问题:此功能在IE6,IE7和一部分IE8用户下没问题,但一部分IE8用户使用时浏览区弹出这么一个对话框“您正在查看的网页正在试图关闭窗口,您确定要关闭吗”,我点击是的话这个页面就关闭了,我点击否的话页面虽然在,但内容缺是空的(除了页面使用的背景图),由于原先的系统涉及到的代码有上千处,改代码不现实,因此我尝试了各种修改浏览器设置的方法,均为能解决这一问题,我尝试的方法有:
(1)点击兼容性视图,将目标网站添加到其中
(2)修改安全性—自定义级别中的脚本访问设置
(3) internet选项-高级 中的设置。再次真心求教大神或遇到过类似情况同仁们,如何通过除了修改代码和重装系统外的任何方法解决这一问题?
ps:我原先的IE(也是IE8)可以正常浏览(不知道是不是和我安装操作系统时安装的不是完全本有关),尽早我重装了IE8之后就报那个错误了。js代码如下
function ShowPage(str)
{
var o=parent.wLoader.correctPage(2)
var sRan="SHOWDETAIL"+parseInt(10000*Math.random())
if(parent.windowMSGDetail==null) parent.windowMSGDetail=[]
parent.windowMSGDetail[parent.windowMSGDetail.length]=parent.open("",sRan,"resizable=1,scrollbars=0,toolbar=0,location=0,left=50,top=50,width=700,height=400")
o.innerHTML+="<input type=hidden name='selectedRow' value='"+str+"'>"
+"<input type=hidden name='sID' value='"+parent.parent.document.all['__USER_ID'].value+"' />"
o.action="../Public/HandlePage.asp"
o.target=sRan
parent.document.body.onbeforeunload=function()
{
var oToClose=parent.windowMSGDetail
for(var i=0;i<oToClose.length;i++)
{
try { oToClose[i].close() } catch(exp) {continue}
}
}
o.submit()
}asp代码如下:
<%
var sDBOwner=Application("DBOwner")
var table=new Grid()
table.limit="distinct"
table.append("排放单号","A.ID",100)
table.append("罐号/系统号","B.BUCKET_NO",80)
table.append("液位/压力","B.LIQUT_ALTITUDE",100)
table.append("签发人","B.APPLY_USRID",60)
table.append("签发时间","TO_CHAR(B.APPLY_DATE,'YYYY-MM-DD HH24:MI')",140)
table.append("当前状态","C.Status_Info")
table.tables=sDBOwner + ".GREMS_STATUS A," + sDBOwner + ".GREMS_APPLY B," + sDBOwner+".GREMS_Status_Info C"
table.filter="A.ID=B.ID AND A.CURRENT_STATUS=C.CURRENT_STATUS"
table.rAttri="@onclick=ShowPage(^1^)"
table.sort="A.ID"
s=(""+Request.QueryString("s")).toUpperCase()
var sf
switch(s)
{
case "DEFAULT":
case "APP":sf=" < 16";break
case "SAM":sf="IN ('APP','ALS','AQT','SMP')";break
case "ANA":sf="IN ('ALS','CQT','ISA')";break
case "CHK":sf="IN ('ISA','WQT')";break
case "COM":sf="IN ('CHK','CQT','RLS')";break
case "CM2":sf="IN ( 'CFM','RLS')";break
case "RLS":sf="IN ('RLS','PUS','HLT','RLG')";break
default:
Response.Clear()
Response.End()
}
var sFlag
if(s == "APP"||s =="DEFAULT") sFlag="C.Status_NO"
else sFlag="A.CURRENT_STATUS"
table.filter += " AND "+sFlag+" "+sf
table.Build()
table=null
%>
处于安全性考虑,用脚本关闭窗口会弹出提示
解决的办法当然是创建一个层(可以是一个绝对位置的div,里面放一个iframe),把要弹出的页面加载到这个iframe,这样可以通过隐藏该层来关闭弹窗,并且会随着父窗口关闭而关闭,不用另外写代码关闭它
人家要考虑安全.
一般项目对这种常规弹窗都应该是封装滴,不可能随处乱用,页面到处写open,Close,所以很容易统一调整效果.调浏览器是下下策,用户有习惯,统一了再让人家改那是灰常不爽的.
您好,我也怀疑是这里的问题,可是在调试的过程中,我把这一句代码注释掉,情况还是没有改变,于是我参照网上的方法,把这一句改为
oToClose[i].opener = null
oToClose[i].open("", "_self")
oToClose[i].close()
这三句,还是不行