Javascript错误会影响浏览器

时间:2016-01-13 13:10:49

标签: javascript html

我为将脚本添加到其网站的网站提供了一些附加服务。从技术上讲,我的脚本不与​​网站的实际功能交互,最多的是读取一些信息,代码的主要部分仅在事件发生后运行(想想像Google Analytics这样的东西)。

最近一个错误导致" X未定义"在某些情况下会发生错误,并且客户端坚持认为此错误导致其网站崩溃。他们给我发了一个屏幕截图,显示了一个空白页面和一个显示错误的控制台屏幕截图,但他们删除了我的代码,因此我无法实时看到它。

我的问题是,这些类型的错误是否有可能影响网站。例如,假设此代码在网站上运行:

tmp

假设由于某种原因,在代码运行时没有定义Sizzle,或者页面上没有任何H1元素,因此 <ul> <li class="menuOption"><a href="javascript:void(0)"></a>Home</li> <li class="menuOption"><a href="javascript:void(0)"></a>About</li> </ul> 为空。在任何情况下产生的错误都会影响外部环境。例如代码运行的页面?显然,如果我覆盖了body元素,那么它会影响网站,但我的问题只是关于&#34; x未定义&#34;或语法错误。

3 个答案:

答案 0 :(得分:3)

错误将破坏当前函数堆栈的执行。

例如,如果你有一个onclick事件,它调用一个函数并且你在开始时有一个错误,它将不会在该代码之后执行任何操作。但这并不意味着您网站上的任何JavaScript都不再适用。一切都会好起来的。因为如果有一些重要的事情在错误之后没有执行它会改变运行时的逻辑。

您还可以使用try-catch块来避免使用Error来关闭函数堆栈:

function a() {
  var x = new DoesNotExist()
  alert("test a") // this will not alert() as there is an error before
}

function b() {
  try {
    var x = new DoesNotExist()
  } catch (e) {}
  alert("test b") // this will alert because the error is catched
}

alert("code is running")
a() 
b() // this will not execute as a() broke this script
// however pressing the button b will still alert in b() as it's in a new stack
alert("code finished")
<input onclick="a()" value="a" type="button" />
<input onclick="b()" value="b" type="button" />

答案 1 :(得分:3)

,在某些情况下,类型&#34; X的错误未定义&#34;影响整个网站。

如果生成&#34; X的代码未定义&#34;错误是:

  • 在函数内部的对象方法 - 它将阻止此当前函数执行,但可能继续使用其下面的脚本
  • 逐行编写Javascript语句它将停止此当前点,不会继续使用else脚本。

可能你的客户端在崩溃的pont下面有更多的Javascript语句(加载页面内容),这些语句没有执行,内容也没有加载。

您只需添加到您的脚本:

    if (typeof variable !== 'undefined')
    {
        // else part of the code
    }

答案 2 :(得分:0)

由于JavaScript是一种改变DOM并提供用户交互的脚本语言,我会说:一般来说,只要您不干扰网站的内容,它就不会影响正在加载的页面。我可以想象有两种可能会阻止页面出现:

  • 你的javascript导致无限循环,因此会阻止正在加载的内容(但是他们应该得到一个错误,就像页面没有反应一样)
  • 依赖于他们的页面构建他们打算使用您的代码做的事情,因此它不会加载,因为它没有您的代码