如果调试器关闭,Internet Explorer将出现运行代码问题
Internet Explorer issues running code if debugger closed
昨天我在使用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的所有实例,然后重新打开它们。
- AJAX调用运行C代码的最佳实践
- 在经过一段时间或满足条件后运行代码
- 在Firefox restartless插件中,当一个新窗口打开时,我如何运行代码(监听窗口打开)
- 如果调试器关闭,Internet Explorer将出现运行代码问题
- JQuery 帖子未在 PHP 文件中运行代码
- 当ajax请求发生时运行代码的Chrome扩展
- 当我运行代码时,我得到以下结果 []对象对象] [对象对象],但应该给我一个有序数组
- 仅当客户端连接到Meteor服务器时才运行代码
- 在.each()循环中的ajax完成后,Jquery运行代码
- node.js和Cygein,我该如何运行代码
- 未访问全局变量,未运行代码
- Meteor - 在客户端上的异步回调的 for 循环后运行代码
- 运行代码以在Android应用程序中单击javascript按钮?尝试在页面上抓取回复按钮联系信息 craigslist
- 函数结束时如何运行代码
- JS 在不满足条件时在 if 语句中运行代码段
- 在 Ember 视图参数更改上运行代码
- 如何在 YUI 模块中运行代码
- 如何在未在 iframe 中定义的 iFrame 中运行代码
- 在后台运行代码,同时显示警报
- 加载页面时运行代码