这个让我很困惑,因为代码看起来完全无害。
IE8通过以下消息暂停脚本执行:
未实施。 map.js行:66 char:5
以下是代码片段:
63 if(data.map[x] !== undefined && data.map[x][y] !== undefined) {
64
65 left = (x - data.dim.x_min)*32 + 30;
66 top = (data.dim.y_max - y)*32 + 30;
67
68 /* do stuff */
XX }
调试信息:x:263 data.dim.x_min:263 y:172 data.dim.y_max:174
数据是从JQuery Ajax调用返回的对象。这适用于Firefox 3.0和3.5,safari 4.0.2,我在IE8中查看页面时才发现此错误。强制IE8进入IE7模式不会使错误消失。
我没有IE7来调试,但是我有一个测试人员说它在IE7中也不起作用。
答案 0 :(得分:20)
代码中使用的变量'top'是DispHTMLWindow2(最外层窗口对象)类型的对象,并且已被浏览器使用并导致冲突,因为该对象不能成为赋值操作的目标。似乎Firefox和Safari忽略了这一点,而IE不允许脚本覆盖它。
解决方案:
1)声明top您使用的是局部变量来定义它的使用范围。
2)将变量重命名为与此预定义全局不冲突的内容。
答案 1 :(得分:2)
IE 8有一个很棒的javascript调试器。您可能希望在错误之前的某处添加断点,并逐步执行代码以查看数据是否有异常。 IE8在列表中使用尾随逗号是挑剔的,这可能就是为什么你只能在其中得到错误。您可以使用F12启动调试器,单击脚本并选择开始调试。您可以通过单击行号所在的边距来添加断点。