Я работаю над страницей на прошлой неделе, которая использует карты Google для отображения всех округов в Грузии и позволяет пользователю нажимать на них и собирать данные переписи по выбранным округам.Округа находятся в массиве GPolygons, и я реализовал интерактивную карту с помощью этого (sudo-code):
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;
}
}
Это прекрасно работало, пока я работал над страницей (тестирование все время проводилось вchrome), и так как я почти закончил работу над ним и со страницами, с которыми он взаимодействует на днях, он начал падать в 90% случаев, когда я его открывал.Эти сбои настолько интенсивны, что моему компьютеру требуется около 15 минут для полного восстановления.Это влияет на весь мой компьютер, а не только на хром.Я закомментировал весь javscript на странице и заново представил его сегмент за сегментом, а проблемной областью является цикл for, который создает прослушиватели наложений полигонов.Чтобы убедиться, что это проблема с самим циклом, а не с кодом внутри, я смоделировал условия цикла, и веб-страница все еще падает в chrome.Даже с таким простым циклом:
var count=0;
for ( var i=0; i<5; i++)
count=1;
alert(count);
страница все равно падает.Я понятия не имею, почему он не может обработать этот код.Кто-нибудь есть какие-либо предложения о том, как решить эту проблему ..?Страница прекрасно открывается в Firefox и IE9.
- обновление -
Чтобы более ярко описать сбой: chrome начинает загрузку страницы.Хотя страница по-прежнему полностью пуста, все начинает замедляться, и вся моя машина становится все более и более безразличной, пока я не могу только двигать мышью и ничего не происходит при наведении мыши или щелчках.Компьютер останавливается около 10 минут, загружает «Ой, щелк!»сообщение об ошибке и остается медленным и не отвечает в течение еще 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
}
}
}
<% = output> - это целый набор полигонов, записанных из кода vb в массив polys [], и они хорошо отображаются на карте.
Если я закомментируюСегмент ПРОБЛЕМНОГО КОДА скрипта страница загружается нормально без необходимой функциональностиЕсли я включу сегмент, страница падает.Однако, если я пропущу сегмент ПРОБЛЕМНЫЙ КОД и включу другой цикл for ЛЮБОЕ в этой функции, страница вылетает.Даже цикл for, такой как
for (var i=0; i<5; i++) { }
, приведет к сбою страницы.Я застрял с этой проблемой в течение нескольких дней, и это сводит меня с ума.У любого есть какие-либо идеи относительно того, в чем может быть проблема ..?
Кроме того, если я захожу на консоль в chrome и печатаю цикл сэмплов, он выполняется нормально.то есть, если я наберу
for (var i=0; i<polys.length; i++) {
GEvent.addListener(polys[i], "click", function() {
alert("Listening!");
});
}
, карта генерирует прослушиватели на каждом оверлее, которые запускаются правильно при щелчке по желанию.Опять же, включение чего-то подобного в функцию приводит к сбою страницы, но в консоли все работает нормально.