Некоторые ошибки Javascript в режиме совместимости с IE8 в IE11 windows 8

#javascript #asp.net #internet-explorer

#javascript #asp.net #internet-explorer

Вопрос:

Я пытаюсь перенести веб-приложение, которое действительно работает в Windows XP / IE8, для работы под Windows 8 / IE11. Когда я пытаюсь протестировать эту систему в режиме совместимости с IE8, я получаю следующие ошибки:

 SCRIPT5: The system cannot locate the resource specified. File:webservice.js, 
Line: 498, Column: 4 HTML1300: Navigation occurred.
File: DesktopWindow.aspx 
SCRIPT450: Wrong number of arguments or invalid property assignment File: operation.js, 
Line: 1849, Column: 3 SCRIPT5007: Unable to get property 'childNodes'
of undefined or null reference File: DesktopWindow.aspx,
Line: 100, Column: 5 SCRIPT450: Wrong number of arguments or invalid
property assignment File: DesktopWindow.aspx, Line: 1881, Column: 4
  

У меня нет проблем с W XP и IE8. Это приложение должно работать на обеих ОС.

operation.js неудачный код:

 for(j = 0; j < iNumData; j  )
{
    id = sIDs.getItem(j);
    value = top.AQContextArea(id);

    //Inform the AQDataArray with the values of the scripting dictionary, creating two copies
    //one for context area "G" an other for context area "F"

    res = objCA.InsertAQData1(operationID, id, value);

}   
  

DesktopWindow.aspx сбой кода:

 function CargarListaPaginasNombresEstaticos()
        {   
            var serverName = top.GetAQData("G","SERVER_NAME");
            var xmlFolder = "AMTAConfig";
            var sXMLFileName = "http://"   serverName   "/"   xmlFolder   "/NombresEstaticosPaginas.xml";

            //var xmlDoc;
            var root;
            var nodos;
            var nodo;
            var nodos2;
            var nodo2;
            var nombre;
            var valor;

            xmlDoc = new ActiveXObject("Msxml2.DOMDocument");
            xmlDoc.async = false;
            xmlDoc.onreadystatechange=verifyState;
            xmlDoc.load(sXMLFileName);

            root = xmlDoc.documentElement;
            nodos = root.childNodes;

            for (var i = 0; i < nodos.length; i  )
            {
                nodo = nodos.item(i);
                nodos2 = nodo.childNodes;

                for (var j = 0; j < nodos2.length; j  )
                {
                    nodo2 = nodos2.item(j);
                    if (nodo2.nodeName=="NombrePagina"){
                        nombre = nodo2.text;
                    }
                    if (nodo2.nodeName=="TituloPagina"){
                        valor = nodo2.text;
                    }                   
                }
                top.PaginasEstaticas.Add(nombre, valor);
            }
            return 0;
        }
  

Комментарии:

1. Какую отладку вы уже выполнили?

2. извините, я добавил код

Ответ №1:

Я решаю эту проблему, изменяя способ доступа к сценарию.Словарь. Я использую два объекта VBArray, созданных с использованием IDictionary ключей и IDictionary элементов, чтобы получить значение. IE больше не совместим со старым способом доступа к значению с помощью ключа

Это ошибочный код:

 function LoadAQData()
{
var sIDs;
var iNumData;
var id;
var value;
var contextarea;
var operationID = "DWI";
var res="";
//throw(0);
//Dump AQ data defined in the scripting dictionary in the desktop window in an array
sIDs = (new VBArray(top.AQContextArea.Keys()));     
iNumData = top.AQContextArea.Count;

for(j = 0; j < iNumData; j  )
{
    id = sIDs.getItem(j);
    value = top.AQContextArea(id);

    //Inform the AQDataArray with the values of the scripting dictionary, creating two copies
    //one for context area "G" an other for context area "F"

    res = objCA.InsertAQData1(operationID, id, value);

}   
  

}

Это решение:

 function LoadAQData()
{
var sIDs;
var iNumData;
var id;
var value;
var contextarea;
var operationID = "DWI";
var res="";
//throw(0);
//Dump AQ data defined in the scripting dictionary in the desktop window in an array
sIDs = (new VBArray(top.AQContextArea.Keys()));
ItemsArray = (new VBArray(top.AQContextArea.Items()));  
iNumData = top.AQContextArea.Count;

for(j = 0; j < iNumData; j  )
{
    id = sIDs.getItem(j);
    value = ItemsArray.getItem(j);
    //Inform the AQDataArray with the values of the scripting dictionary, creating two copies
    //one for context area "G" an other for context area "F"

    res = objCA.InsertAQData1(operationID, id, value);

}   
  

}