#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);
}
}