如果调试器关闭,Internet Explorer将出现运行代码问题

Internet Explorer issues running code if debugger closed

本文关键字:运行 代码 问题 Explorer 调试器 Internet 如果      更新时间:2023-09-26

昨天我在使用Internet Explorer时遇到了一个有趣的问题。一个脚本可以在Chrome、Firefox、Safari上完美运行,但在InternetExplorer11上它什么都做不了。如果我打开调试器,它会顺利运行,一切都是应该的,但当我关闭调试器时,它就停止了工作,我不知道为什么会这样。我的第一个想法是IE扩展,但我禁用了它们。我试着在安全模式下运行,有管理员权限,但似乎什么都不起作用。

总而言之:IE-脚本只在调试器打开时运行。不会产生任何错误,只是不起作用。

我真的很高兴有任何想法,我能对此做些什么。提前谢谢。

--------------编辑---------------这是未运行的脚本。

        for (var i = 0; i < AllStrategyGrids.length; i++) {
                try {
                    isChange = true;
                    var data = $("#objectives").data("kendoGrid").select().data();
                    if (AllStrategyGrids[i].ID == data.uid) {
                        var jsonData = new Object();
                        jsonData.StrategicID = "1";
                        jsonData.ObjectiveID = $("#ObjectiveID").val();
                        jsonData.HeaderID = "00000000-0000-0000-0000-000000000000";
                        jsonData.PeriodID = "00000000-0000-0000-0000-000000000000";
                        jsonData.Strategic = "Please enter strategic";
                        jsonData.TaskStatus = "";
                        jsonData.TaskStatusID = "1";
                        jsonData.Position = "";
                        jsonData.Sorted = "1";
                        jsonData.SessionID = "00000000-0000-0000-0000-000000000000";
                        tmpGrid = AllStrategyGrids[i].Grid.data("kendoGrid");
                        var dataRows = tmpGrid.items();
                        var rowIndex = dataRows.index(tmpGrid.select());
                        $.ajax({
                            url: "CreateStrategy",
                            type: 'POST',
                            data:
                                    {
                                        strategics: jsonData,
                                        VersionID: $("#VersionUID").val(),
                                        index: rowIndex
                                    },
                            success: function () {
                                tmpGrid.dataSource.read();
                            }
                        });
                    }
                } catch (e) { }
            }

只是猜测,这可能是因为在该脚本中有一个console.log,而在IE中,如果调试器关闭,则控制台对象不存在。。。我们都在那里:)

一个简单的解决方案是尽可能早地在网站上添加小垫片。。它不会在除IE之外的任何浏览器上做任何事情,只会停止可能阻止其他JS代码运行的执行错误。。。

   <script>
      if(!console)console={log:function(){}};
   </script>

这里有一个更强大的解决方案:

';控制台';是Internet Explorer 的未定义错误

----编辑

好吧,我可以从你的代码中看到的一件事是,你将默默地失败,因为你使用了try-catch,但什么都不做。这将捕获你遇到的任何异常(阻止它到达你的窗口,从而看起来你没有错误)。我可能至少会在测试时提醒错误消息(这样你就不需要打开调试器),看看是否抛出了任何东西。。。

我自己也怀疑你的ajax请求。。或者IE8中未定义的。所以添加一些日志警报(我知道是蛮力)来测试你在某些点上的假设,例如

alert("Reach here and data="+data);

或者,我还可以看到您的ajax请求没有不成功的回调,这可能是添加到调用中的好主意。可能是因为某种原因,成功并不需要。。。

                    $.ajax({
                            url: "CreateStrategy",
                            type: 'POST',
                            data:
                                    {
                                        strategics: jsonData,
                                        VersionID: $("#VersionUID").val(),
                                        index: rowIndex
                                    },
                            success: function () {
                                tmpGrid.dataSource.read();
                            }
                        })
                        .fail(function() {
                           alert( "error" );
                           //handle a failed load gracefully here
                        })
                        .always(function() {
                           alert( "complete" );
                           //useful for any clean up code here
                        });

最后的思考食物。

由于您正在检查DOM中的项,我不知道何时调用此代码,只是为了防止在页面重载后直接调用它。。让我们假设IE中的某些东西在"那个"点上还没有准备好,可能是DOM还没有准备好在被查询?请尝试在DOM就绪时执行此代码。。有很多方法可以实现$.ready、setTimeout(f(){},1)或vanilla。。。但是你明白了。。

注意:使用开发工具调试脚本:MSDN

要为Internet Explorer的所有实例启用脚本调试,请在在"Internet选项"菜单中,单击"高级"选项卡。然后,在浏览类别,取消选中禁用脚本调试(InternetExplorer)选项,然后单击"确定"。要使更改生效,关闭Internet Explorer的所有实例,然后重新打开它们。