我尝试模拟从外部URL加载的脚本停止在我的站点上执行任何更多脚本的问题.
我试图通过调用一个不退出的函数来模拟这样的问题.我可以在firebug中看到错误,但仍然会执行页面上的不同脚本.
Javascripts中有不同类型的错误吗?如果是:什么样的错误会阻止脚本执行?我只需要Firefox的答案.
编辑
这个问题很容易被误解,但是Rob W得到了它:我需要抛出异常并且该异常需要停止进一步的脚本执行.
Rob*_*b W 19
对标题的 回答:没有
回答"JavaScript中是否存在不同类型的错误**:是的,请参阅MDN:错误
语法错误将阻止整个脚本块被执行,其他错误(TypeErrors,引用错误)将仅停止发生错误后执行.
不同的<script>块分别执行.您无法通过在第一个块中抛出错误来阻止执行第二个块(演示:http://jsfiddle.net/WJCEN/).
<script>Example: Syntax error in this script.</script>
<script>console.log('Still executed.')</script>
Run Code Online (Sandbox Code Playgroud)
此外,如果使用try-catch(demo:http://jsfiddle.net/WJCEN/1/)捕获错误,则错误甚至不会停止执行整个块.
try {throw 'Code';}catch(e){}
console.log('Still executed');
Run Code Online (Sandbox Code Playgroud)
1: <script>window._alert = alert;alert=null;</script>
2: <script>alert('Some code!');confirm('Not executing');</script>
3: <script>alert=_alert;delete window._alert;alert('Done!');</script>
Run Code Online (Sandbox Code Playgroud)
此方法基于脚本2期望alert成为函数的事实.我们已经重写alert了一个非函数属性(脚本1).脚本2抛出a TypeError,跳过第二个块.
我们在脚本3中恢复原始值.
4. <script>Object.defineProperty(window, 'test',{value:null});</script>
5. <script>var test=function(){alert('Test');};test();alert('What?');</script>
Run Code Online (Sandbox Code Playgroud)
此方法依赖于该Object.defineProperty方法,以有效地定义常量值.在严格模式下,var test声明会抛出TypeError:"test is read-only".
当未启用严格模式时,将抛出TypeError test():"test is not a function"(因为我们test在脚本4中定义为常量).
注意:最后一个方法无法正常使用函数声明(请参阅错误#115452,Chrome 17)