我正在尝试使用google maps api v3渲染热图,该图适用于所有浏览器但不适用于IE。 IE 9需要很长时间才能渲染,但IE8开始抛出“停止运行此脚本”警报,说脚本耗时太长。
我在下面放了一个简单的例子,只有5个集群,IE8仍然会引发长时间运行的脚本错误。你能帮我解决这个问题吗?谢谢!
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?libraries=visualization&sensor=false">
</script>
<script type="text/javascript" src="https://code.jquery.com/jquery-1.9.1.min.js"></script>
<script type="text/javascript">
$(function () {
var data = [
{ "lat": "45.284397", "lon": "-126.724372", "count": 10 },
{ "lat": "45.284156", "lon": "-126.724853", "count": 5 },
{ "lat": "45.284450", "lon": "-126.725532", "count": 20 },
{ "lat": "45.284839", "lon": "-126.725875", "count": 34 },
{ "lat": "45.285442", "lon": "-126.726181", "count": 46 }
];
var usaCenter = new google.maps.LatLng(54.6, -119.2);
var heatMap = new google.maps.Map(document.getElementById('heatMap'), {
zoom: 4,
center: usaCenter,
mapTypeControlOptions: {
mapTypeIds: ["Traffic", google.maps.MapTypeId.ROADMAP, google.maps.MapTypeId.SATELLITE, google.maps.MapTypeId.HYBRID, google.maps.MapTypeId.TERRAIN]
},
mapTypeId: google.maps.MapTypeId.ROADMAP
});
var heatMapData = [];
var bounds = new google.maps.LatLngBounds;
$.each(data, function (index, point) {
var latLng = new google.maps.LatLng(point["lat"], point["lon"]);
var heatPoint = {
location: latLng,
weight: point["count"]
};
heatMapData.push(heatPoint);
bounds.extend(latLng);
});
var heatmapOverLay = new google.maps.visualization.HeatmapLayer({
data: heatMapData,
opacity: 0.7
});
heatmapOverLay.setMap(heatMap);
});
</script>
<div id="heatMap" style="width:1600px;height:1600px"></div>
答案 0 :(得分:2)
IE8根据语句数量发出此警告,而不是基于脚本运行的时间。我认为这个警告是不准确的。
默认情况下,超时对话框的阈值限制为5,000,000个语句。
Microsoft发布了一个补丁来解决此问题:http://support.microsoft.com/kb/175500
请注意,微软还会指出哪个是注册表项,以便在必要时将其增加到任何级别:
使用Regedt32.exe
等注册表编辑器,打开此键:
HKEY_CURRENT_USER \ Software \ Microsoft \ Internet Explorer \ Styles
注意如果样式键不存在,请创建一个名为样式的新键。
在此项下创建一个名为“ MaxScriptStatements ”的新DWORD值,并将该值设置为所需的脚本语句数。
如果您不确定需要将其设置为哪个值,可以将其设置为DWORD值0xFFFFFFFF以避免出现该对话框。