Я работаю над страницей на прошлой неделе, которая использует карты Google для отображения всех округов в Грузии и позволяет пользователю нажимать на них и собирать данные переписи о выбранных округах. Округа в массиве GPolygons, и я реализовал интерактивную карту с этим (Судо-код):Хром сбой с javascript?
instantiate map;
fill polys[] array from vb code-behind;
for (var i=0; i<polys.length; i++) {
GEvent.addListener(polys[i], "click", function() {
highlight polygon and select item in listbox;
or
un-highlight polygon and deselect item in listbox;
}
}
Это работало большое, когда я работал на странице (тестирование все время в хроме) , и поскольку я почти закончил работу над ним и страницы, с которыми он взаимодействует с другим днем, он начал сбой в 90% случаев, когда я его открыл. Эти сбои настолько интенсивны, что мой компьютер занимает почти 15 минут, чтобы полностью восстановиться. Это влияет на весь мой компьютер, а не только на хром. Я прокомментировал весь javscript на странице и повторно включил его по сегменту, а проблемная область - это цикл for, который создает слушатели на многоугольных оверлеях. Чтобы убедиться, что это проблема с самим циклом, а не с кодом внутри, я смоделировал условия цикла, и веб-страница все еще падает с хром. Даже с такой простой петлей:
var count=0;
for (var i=0; i<5; i++)
count=1;
alert(count);
страница все еще падает. Я не знаю, почему он не может справиться с этим кодом. У кого-нибудь есть предложения по устранению этой проблемы ..? Страница открывается в Firefox и IE9.
--update--
Для описания аварии более ярко: хром начинает загрузку страницы. Пока страница по-прежнему полностью пуста, все начинает замедляться, и вся моя машина становится все более и более не реагирующей, пока я не могу только перемещать мышь, и ничего не происходит при наведении указателей мыши или кликах. Компьютер остается в состоянии покоя около 10 минут, загружает «Aw, snap!». страницу ошибки, и остается медленной и не реагирующей на еще 5 минут после сбоя. Вот и вся функция, которая вызывает ошибку.
var polys = [];
var labelsAr = [];
var poly;
var point; var point2;
var marker;
var label;
var map;
if (document.getElementById("map") != undefined) {
// init map
map = new GMap2(document.getElementById("map")); }
var pnames;
pnames = "<%=pnames%>";
var labels = pnames.split(",");
function setupmap(){
if (GBrowserIsCompatible()) {
if (document.getElementById("map") != undefined) {
polyfip = [];
<%=polyfipSt%>
// add map controls and set loc
// the map = new GMap2 statement is not within a code block
map.addControl(new GLargeMapControl());
map.addControl(new GMapTypeControl());
map.setCenter(new GLatLng(32.80, - 83.50), 7);
var colour = "#ff6666";
var tooltip = document.createElement("div");
map.getPane(G_MAP_FLOAT_PANE).appendChild(tooltip);
tooltip.style.visibility="hidden";
<%=output%>
//PROBLEM CODE
for (var i=0; i<polys.length; i++) {
GEvent.addListener(polys[i], "click", function() {
var evtObj = window.event ? event : e;
for (var i=0; i<polys.length; i++) {
if (this == polys[i]) {
if (evtObj.ctrlKey) {
map.closeInfoWindow();
clickCounty(labels[i]); //a function elsewhere defined with simple if-else checks to highlight the county
}
else {
if (document.forms["pageform"].MainContent_CountySelection.options[i].selected==true && countiesSelected==1) {
clickCounty(labels[i]);
map.closeInfoWindow();
}
else {
var overlaylatlng = this.getVertex(0);
for (var j = 0; j < document.forms["pageform"].MainContent_CountySelection.length; j++) {
document.forms["pageform"].MainContent_CountySelection.options[j].selected=false;
var tempPoly = polys[j];
tempPoly.color = "EFEDB0";
map.addOverlay(tempPoly);
}
countiesSelected = 0;
//an infowindow with some js function links
var infoWindow = map.openInfoWindowHtml(overlaylatlng,"<form id='f" + i + "' name='f" + i + "' method='post' action='countystats.aspx'><input type='hidden' name='countyName' id='countyName' value='" + labels[i] + "' /></form> County: "+labels[i]+" <br /><br /><a href='javascript:submitForm(\"f" + i + "\")'>Core Data</a><br /><form id='fs" + i + "' name='fs" + i + "' method='post' action='countystats2.aspx'><input type='hidden' name='countyName' id='countyName' value='" + labels[i] + "' /></form><a href='javascript:submitForm(\"fs" + i + "\")'>Single Tract Statistics</a> <form id='fsc" + i + "' name='fsc" + i + "' method='post' action='getACScounty.aspx'><input type='hidden' name='countyName' id='countyName' value='" + labels[i] + "' /></form><a href='javascript:submitForm(\"fsc" + i + "\")'>ACS All Tracts in County Statistics</a> <br /><a href=getsp1.aspx?countylist='" + polyfip[i] + "'>Census2010 County</a> <form id='fscsp" + i + "' name='fscsp" + i + "' method='post' action='getACScountysp.aspx'><input type='hidden' name='countyName' id='countyName' value='" + polyfip[i] + "' /></form><a href='javascript:submitForm(\"fscsp" + i + "\")'>Census2010 Sub-County</a>");
clickCounty(labels[i]);
}
}
break;
}
}
});
}
//END PROBLEM CODE
}
}
}
<% = выход> является целой кучей полигонов, написанных от VB кода в Polys [] массив, и они появляются на карте штрафе.
Если я прокомментирую сегмент PROBLEM CODE скрипта, страница загрузится отлично, без необходимости в функциональности. Если я включу сегмент, страница выйдет из строя. Однако, если я опускаю сегмент ПРОБЛЕМНОГО КОДА и включаю в него любую другую петлю в любом случае, страница выходит из строя. Даже петля для петли, такая как
for (var i=0; i<5; i++) { }
приведет к сбою страницы. Я застрял в этой проблеме уже несколько дней, и это сводит меня с ума. У кого-нибудь есть какие-то идеи относительно проблемы.
Кроме того, если я перехожу на консоль в хром и набираю цикл образца, он выполняется нормально. т.е. если я типа
for (var i=0; i<polys.length; i++) {
GEvent.addListener(polys[i], "click", function() {
alert("Listening!");
});
}
карта генерирует слушателей на каждом накладкой, что огонь правильно при нажатии, как хотелось бы. Опять же, включая что-то вроде этого внутри функции, сбой страницы, но в консоли он отлично работает.
Когда вы копируете/вставляете этот простой цикл в консоль на пустой странице, это может привести к его краху? ... Если нет, ваша проблема в другом месте. – jondavidjohn
Определите «крушение». Опишите точное поведение. –
Если «крушение» означает «Я получил« Aw, хватаю ». страница. ", то, пожалуйста, посетите' chrome: // crashes' и отправьте отчет об ошибке/сбое. Если вы можете воспроизвести проблему, нам бы хотелось увидеть код. –