我的一项工作职责是支持旧的在线应用程序(以ISAPI dll编写)。客户已报告一项功能不再有效。他说他在Win7上使用IE8,但我只能在Win7上复制IE9的问题。该应用程序依赖于javascript,并使用特定于IE的代码。没有使用JQuery或其他JavaScript库。它是在2002年或之后写的,需要IE 5.5或更新版本。
该应用有多个嵌套框架(是的,它是PITA)。当尝试从弹出模式窗口访问框架的内容时,似乎会发生此问题。用户单击该框架中的按钮图像,打开模态对话框窗口。用户更改该窗口中的选项并单击“确定”按钮。此时,应将更改发送到服务器并更新帧。但是这没有发生,并且没有向用户显示错误以提供提示。
这个应用程序的作者创建了一个调试模式,它在一个单独的浏览器窗口中记录一堆消息。我添加了一些额外的调试语句并缩小了问题范围。这是记录的错误文本:
[SERV REQ #13] requesting fraUOMTraces=/isapi/dataminer.dll/UOMTraceList?sfn=220333606&sfn=220333606&UOM=1&TdmUserHierarchy_cdsStats_SmoothTime=1800&TdmUserHierarchy_cdsStats_SmoothType=Boxcar&TdmUserHierarchy_cdsStats_SmoothMinMax=avg
*-* RequestDocument oReq.Request: /UOMTraceList (13)
*** ERROR *************************************************
Error while retrieving oDoc (13)!
Number = -2146828218
Description = Permission denied
Name = TypeError
Message = Permission denied
***********************************************************
'fraUOMTraces'是框架的名称。第一行是应该发送到服务器的请求。 'oReq'是一个自定义的javascript对象('RequestObj'),它包含大量有关服务器请求的详细信息。
在Error while retrieving oDoc (13)
中,'oDoc'应包含框架的文档对象。但是当尝试从oReq对象检索该属性时,会生成“权限被拒绝”错误。以下是发生这种情况的代码:
this.RequestDocument = function(oReq){
var oDoc = null;
DebugText("*-* RequestDocument oReq.Request: " + oReq.Request + " (" + oReq.RequestID + ")");
try{
//== try to get the document for this request
oDoc = oReq.Destination.document;
//== Now try to get the document if we are in a frame
oDoc = oReq.Destination.contentWindow.document;
}catch(err){
//== No big deal, this happens if we are not in a frame
if(oDoc == null) {
DebugError("Error while retrieving oDoc (" + oReq.RequestID + ")!", err);
}
}
return oDoc;
}
关于在这种情况下会导致“权限被拒绝”错误的任何想法?我已经摆弄了各种IE选项/设置,但却找不到任何影响问题的方法。此错误不会显示在XP / IE8或带有IE8的同事Win7上。
如果你通过这条长信息做了这件事并且好奇地想要解决这个问题,我可以给你一个指向该应用程序和“访客”凭据的链接,以便查看它的实际效果。
-Dave