Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检测IE'的原因;s操作中止问题_Javascript_Internet Explorer - Fatal编程技术网

Javascript 检测IE'的原因;s操作中止问题

Javascript 检测IE'的原因;s操作中止问题,javascript,internet-explorer,Javascript,Internet Explorer,我的网站正在遭受灾难。我觉得奇怪的是,在我的例子中,错误只是偶尔发生。这个网站已经运行了三个月了,但今天它开始运行,但不是每次都这样 发生这种情况的页面相当大,有很多第三方控件。我想要的是一个工具,可以精确定位故障发生的位置。看起来我能做的最好的事情就是找到操作中止后发生的第一个javascript错误;然而,这并没有多大帮助。这个失败是因为dom的一个元素不可用,这是我在IE停止解析HTML后所期望的 有人有什么想法或技巧来缩小这个范围吗 编辑 我赞赏解决这一问题的其他办法;但是,我要寻找的是

我的网站正在遭受灾难。我觉得奇怪的是,在我的例子中,错误只是偶尔发生。这个网站已经运行了三个月了,但今天它开始运行,但不是每次都这样

发生这种情况的页面相当大,有很多第三方控件。我想要的是一个工具,可以精确定位故障发生的位置。看起来我能做的最好的事情就是找到操作中止后发生的第一个javascript错误;然而,这并没有多大帮助。这个失败是因为dom的一个元素不可用,这是我在IE停止解析HTML后所期望的

有人有什么想法或技巧来缩小这个范围吗

编辑 我赞赏解决这一问题的其他办法;但是,我要寻找的是一种方法来确定是哪个脚本导致了问题

最终编辑 切换到IE8后,我能够确定原因是AjaxControl工具箱的模式弹出对话框。没有具体的方法来确定这是令人失望的,但是调试器让我看到它失败的地方,这是非常一致的。由于控件中没有办法告诉它移动其初始化,因此我禁用了它,并使用脚本在文档加载事件处理程序中创建客户端控件


这个问题不是控件的错误,因为弹出窗口的内容实际上是第二种形式。坦白地说,我很惊讶它能工作。

您是否有任何javascript操作DOM,如中所述

尝试将所有脚本块移动到页面的最底部,就在
标记之前,不要尝试设置body标记本身的innerHTML属性

如果问题是在完全构建DOM之前执行javascript,请尝试将任何初始化调用移动到只在页面完全加载后运行的函数中。因此,与此不同的是:

<div class="myWidgetControl"/>
<script type="text/javascript">
  initializeWidgets();
</script>
<div class="myWidgetControl"/>
<script type="text/javascript">
  $(document).ready(
    function () { initializeWidgets(); }
  );
</script>

初始化Widgets();
试着这样做:

<div class="myWidgetControl"/>
<script type="text/javascript">
  initializeWidgets();
</script>
<div class="myWidgetControl"/>
<script type="text/javascript">
  $(document).ready(
    function () { initializeWidgets(); }
  );
</script>

$(文件)。准备好了吗(
函数(){initializeWidgets();}
);

这是我使用的一个巧妙的技巧(基于下面JS注释中的链接),它完全避免了Op Ab错误,而不会影响其他浏览器的性能。首先在函数中包装任何可能导致错误的脚本(例如,加载/实例化第三方小部件),然后在
delayExecutionForIE
函数中调用该函数——请注意,对
myFunction
的调用有两次,一次用于IE,一次用于nice浏览器

您的第三方脚本可能会阻止此工作,具体取决于它的功能和加载方式,但绝对值得一试

function delayExecutionForIE() {
      if ( typeof document.all == "object" && 
           (document.readyState != "loaded" 
           && document.readyState != "complete") 
         ) {
            try {
                  //If IE is used, use the trick by Diego Perini
                  //http://javascript.nwbox.com/IEContentLoaded/
                  document.documentElement.doScroll("left");
                  myFunction();
            } catch(error) {
                  setTimeout(delayExecutionForIE, 200);
            }
      } else {
            myFunction();
      }
}

function myFunction() {
    //this is your function that manipulates the DOM
}

delayExecutionForIE();

虽然IE8将不再导致错误完全“崩溃”渲染,而是记录错误,但不幸的是,新开发工具中的JavaScript调试器没有捕捉到错误,错误消息也没有告诉您错误真正发生的位置

一种解决方法是使用IE8的调试器在运行的第一段JavaScript代码上设置一个断点,然后继续点击“步骤”按钮,直到浏览器左下角出现错误图标,这种方法肯定很繁琐,但可以找到问题所在。当这种情况发生时,您知道导致错误的代码行就是在单击步骤之前高亮显示的代码行。这可能是相当多的代码,你将逐步通过,虽然,但我想不出任何其他东西(嗯,除了联系供应商的第三方代码,看看他们是否有任何更新,可能是相关的)


当然,你可以告诉你的用户升级到IE8

微软是否建议升级到IE8

您可以使用IE博客提供的脚本来调查问题。请参阅:

在大多数情况下,这是JS中的DOM问题

$( element ).append( someHtml );
因此,在IE中,只有当对象有结束标记时,才能向对象添加内容

例如,下面的代码将导致IE7显示消息“操作中止”


...
$(o.appendChild();
...
正确的方法是什么

<div id="o">

...

</div>

$(o).appendChild();

...
$(o.appendChild();

这就是问题所在,我个人没有这样做,但我不知道ComponentArt网格、对话框、回调、Ajax工具箱对话框等是否在这样做。我收到的第一个javascript错误来自Ajax控件工具箱注册弹出窗口。它失败了,因为$get(element)是空的,所以我们甚至没有在这里修改dom……好的,我刚刚添加了一个示例,说明如何解决这个问题。这有帮助吗?我应该提到,该示例使用JQuery,但您可以使用任何方法将事件注册到body的onload事件中。这并不是真的,因为我不确定是什么javascript导致了这个问题,而且很多javascript都是由我的服务器端控件发出的,这就是为什么我不能轻松地将所有脚本移到底部。如果我能确定谁是罪犯,那么我就可以和他周旋,除掉他等等。IE的javascript错误报告是出了名的无用。你在Firefox中有任何错误吗?没有,Firefox中没有。我升级到IE8,虽然它在错误发生时不再出错,但我在应用程序中失去了关键功能。我有一个好主意是什么导致了这个问题,现在只需要尝试和证明它。感谢您提供的额外信息,即IE8中仍然会发生错误,只是不会经常发生。请参阅上面Robert.K的文章。伟大的链接-它承认这个错误也发生在IE8中,只是不经常发生。