Старое веб-приложение, имеющее проблемы с JavaScript в IE9 - PullRequest
2 голосов
/ 07 января 2012

Одной из моих рабочих обязанностей является поддержка старого онлайн-приложения (написанного как 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

...