openlayers 2.12 和2.11在IE10中错位的原因分析及解决方法【转】
2013-07-10 18:40
190 查看
原文http://www.openlayers.cn/forum.php?mod=viewthread&tid=195&extra=page%3D1
openlayers 2.12 和2.11在IE10中均存在错位现象,2.13 dev中已经修复了此bug
最近有用户反映在IE10下运行openlayers2.11版的地图网站会出现瓦片错位的现象(具体现象是瓦片上下错位,左右不错位)
经过本人一番辛苦的调试,发现问题出现在Gird.js文件中的initGriddedTiles方法中的do while循环中。如下图中所示。
initGriddedTiles方法中有一个嵌套的do while循环(do while语句中还有一个do while语句),里层的do while语句块在第一次执行的tileoffsetlon的值一定是等于startLon的,但是我测试发现,第一次执行里层的do
while语句块的时候tileoffsetlon的值不等于startLon,地图就出现了上下错位,地图错位也确实是这个原因:第一次执行里层的do while语句块的时候tileoffsetlon的值不等于startLon。那这是为什么呢?经过本人自行查看代码,在do while循环中,本身没有代码修改startLon的值,当地图缩放到某一级别的时候(我测试通常是第7级开始错位)第一次执行里层的do while语句块的时候,tileoffsetlon的值不居然等于startLon。奇迹发生了,你不可不相信IE10能创造奇迹。在火狐,chrome,IE8,IE9等浏览器下测试不会发生的问题,在IE10(IE10
pro Release )下发生了;还有一个更神奇的事情是如果你开启了IE10的开发人员工具的debugger(代码中其实并没有debugger),也不会出现瓦片错位的现象。微软我很你,就为了这个问题我头都大了!谁都了我的奶酪(tileoffsetlon值不对是E10自己改动了,我很确认,因为代码中没有其他值修改startLon),
IE10。这里我猜测有可能是do while语句在IE10中存在某种缺陷。值被莫名修改,让人很没有安全感额!
最后跟大家说一下解决方案:
在openlayers2.11版本 OpenLayers.Layer.Grid.js第507行的下一行加入如下代码:
if(tileoffsetlon != startLon && colidx==0 ) {
tileoffsetlon = startLon
}
在 在openlayers2.12版本第1013行的下一行加入以上代码:
就OK了。
大家可以测试下
openlayers 2.12 和2.11在IE10中均存在错位现象,2.13 dev中已经修复了此bug
最近有用户反映在IE10下运行openlayers2.11版的地图网站会出现瓦片错位的现象(具体现象是瓦片上下错位,左右不错位)
经过本人一番辛苦的调试,发现问题出现在Gird.js文件中的initGriddedTiles方法中的do while循环中。如下图中所示。
initGriddedTiles方法中有一个嵌套的do while循环(do while语句中还有一个do while语句),里层的do while语句块在第一次执行的tileoffsetlon的值一定是等于startLon的,但是我测试发现,第一次执行里层的do
while语句块的时候tileoffsetlon的值不等于startLon,地图就出现了上下错位,地图错位也确实是这个原因:第一次执行里层的do while语句块的时候tileoffsetlon的值不等于startLon。那这是为什么呢?经过本人自行查看代码,在do while循环中,本身没有代码修改startLon的值,当地图缩放到某一级别的时候(我测试通常是第7级开始错位)第一次执行里层的do while语句块的时候,tileoffsetlon的值不居然等于startLon。奇迹发生了,你不可不相信IE10能创造奇迹。在火狐,chrome,IE8,IE9等浏览器下测试不会发生的问题,在IE10(IE10
pro Release )下发生了;还有一个更神奇的事情是如果你开启了IE10的开发人员工具的debugger(代码中其实并没有debugger),也不会出现瓦片错位的现象。微软我很你,就为了这个问题我头都大了!谁都了我的奶酪(tileoffsetlon值不对是E10自己改动了,我很确认,因为代码中没有其他值修改startLon),
IE10。这里我猜测有可能是do while语句在IE10中存在某种缺陷。值被莫名修改,让人很没有安全感额!
最后跟大家说一下解决方案:
在openlayers2.11版本 OpenLayers.Layer.Grid.js第507行的下一行加入如下代码:
if(tileoffsetlon != startLon && colidx==0 ) {
tileoffsetlon = startLon
}
在 在openlayers2.12版本第1013行的下一行加入以上代码:
就OK了。
大家可以测试下
相关文章推荐
- 【转载】div层调整zindex属性无效原因分析及解决方法
- Oracle发生死锁原因分析及解决方法
- 采用ISO8211封装的S57数据,中文读取时乱码及丢字原因分析与解决方法
- php session_start()出错原因分析及解决方法
- “display:block-inline形式的Span或Div中添加文字后,导致Span或Div排版掉落、错位”的原因及解决方法
- MySQL This function has none of DETERMINISTIC, NO SQL...错误1418 的原因分析及解决方法
- 打开Word文档非常缓慢”原因分析及解决方法
- Windows变慢原因分析及解决方法
- IE下超链接使用绝对定位后失效原因分析及解决方法
- Code:Blocks 中文乱码问题原因分析和解决方法!
- win 10发布者不受信任怎么办?不受信任的原因分析以及解决方法
- 用axis2解析xml失败的原因分析和解决方法
- ORACLE EXP不能导出空表的原因分析及解决方法
- MySQL This function has none of DETERMINISTIC, NO SQL...错误1418 的原因分析及解决方法
- windows(win7,win8,xp)hosts文件找不到原因分析及解决方法
- MySQL 错误1418 的原因分析及解决方法
- Provisioning Profile和Code Signing常见问题,原因分析及解决方法汇总.
- tomcat内存溢出原因分析与解决以及java内存溢出、栈溢出的原因与排查方法
- WindowsXP系统所占空间内存为什么总是很大?空间占用大的原因分析与解决方法介绍