2016-01-13 145 views
2

我为将网站脚本添加到其网站的网站提供了一些附加服务。从技术上讲,我的脚本不会与网站的实际功能相互作用,最重要的是读取一些信息,代码的主要部分仅在事件发生后才运行(像Google Analytics一样)。Javascript错误对浏览器的影响

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

我的问题是,如果有这些类型的错误可能会影响网站的任何可能性。例如,假设这段代码的网站上运行:

var tmp = Sizzle('h1'); 
tmp[0].innerHTML = "test"; 

假设由于某种原因,嘶嘶声已经不是代码运行时或定义,有没有在网页上的任何元素H1所以tmp是空的。任何情况下产生的错误都会影响外部环境。例如代码运行的页面?显然,如果我已经覆盖了body元素,那么会影响网站,但我的问题只是关于“x未定义”或语法错误。

+1

一般来说,一个空白页是指一些渲染问题,这往往不是通过什么用JavaScript触发。一般的规则是,只要你不与渲染的东西互动,它就不会有所作为。 – weirdpanda

回答

3

An Error会中断当前函数堆栈的执行。

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

您也能避免错误下井功能堆叠用try-catch块:

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" />

0

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

  • 你的JavaScript导致一个无限循环,并因此被加载的内容块(但他们应该得到类似的页面没有反应错误)
  • 将取决于他们的网页上的东西,他们打算用你的代码,所以它不会加载做建筑,因为它没有你的代码
3

,有情况的类型“X的这个错误未定义“影响整个网站。

如果其产生“X是未定义”的错误代码是:

  • 函数对象方法内部内 - 这将停止从执行该电流的功能,但有可能将继续与它下面的脚本。
  • 写成逐行JavaScript语句这个当前点停止不会与其他脚本进行

可能是你的客户有崩溃蓬下面更JavaScript语句(页面的加载内容),不执行这些语句并没有加载内容。

您可以简单地添加到您的脚本:

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

我的脚本被添加到它自己的