Одной из моих рабочих обязанностей является поддержка старого онлайн-приложения (написанного как ISAPI dll).Клиент сообщил, что одна функция больше не работает.Он говорит, что использует IE8 на Win7, но я могу продублировать проблему только с IE9 на Win7.Приложение сильно зависит от 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 или на коллегах Win7 с IE8.
Если вы сделали это длинное сообщение и вам любопытно посмотреть на проблему, я могу дать вамссылка на приложение и учетные данные «гостя», чтобы увидеть его в действии.
-Dave