我为将脚本添加到其网站的网站提供了一些附加服务。从技术上讲,我的脚本不与网站的实际功能交互,最多的是读取一些信息,代码的主要部分仅在事件发生后运行(想想像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;或语法错误。
答案 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;错误是:
可能你的客户端在崩溃的pont下面有更多的Javascript语句(加载页面内容),这些语句没有执行,内容也没有加载。
您只需添加到您的脚本:
if (typeof variable !== 'undefined')
{
// else part of the code
}
答案 2 :(得分:0)
由于JavaScript是一种改变DOM并提供用户交互的脚本语言,我会说:一般来说,只要您不干扰网站的内容,它就不会影响正在加载的页面。我可以想象有两种可能会阻止页面出现: