单独的Javascript脚本标记是否与其他错误隔离?

时间:2015-07-29 16:14:32

标签: javascript html runtime-error

首先,我将说明我想要实现的目标:我希望有一些代码通过websockets连接到我的服务器。我向浏览器发送消息,告诉它远程重新加载。我希望此代码(除非它本身没有错误)不受其他页面错误的影响,因此我仍然可以远程刷新页面以修复所述错误。

在我对最新Chrome和iPad Safari的测试中,如果一个脚本标记中发生运行时异常,则js执行暂停。但是,其他脚本标记中的任何其他javascript仍然没有问题。这是预期的行为,还是我刚刚幸运?我抛出了TypeError' s,throw new Error('something')和未定义的错误,我的其他脚本仍然正常运行。我这样做:

<script type='text/javascript' src='reloadCode.js'/>
<script type='text/javascript' src='mainApp.js'/>

如果我在mainApp.js中抛出bajillion错误,我的websocket代码仍会运行并刷新reloadCode.js中的页面,即使首先评估mainApp.js

4 个答案:

答案 0 :(得分:3)

好的,我自己做了一个测试,以确保,(我不认为单独的JS文件应该从编译中互相混乱)

我首先创建了一个简单的HTML页面,其中包含3个JS文件。 这是JS文件

myscript1.js

alert("1");

myscript2.js

alert("2")a;

myscript3.js

alert("3");

HTML

<html>
<body>
<script src="myscript1.js"></script>
<script src="myscript2.js"></script>
<script src="myscript3.js"></script>
</body>
</html>
运行了myscript1和myscript3,但由于出现错误,它没有运行myscript2,所以只要你的reloadCode.js工作正常就可以了,那么你就是A-OK

为了清楚我只收到2个警报,而不是3个,这是因为myscript2.js没有编译。

答案 1 :(得分:1)

除非他们之间互动......否则他们彼此分开。

答案 2 :(得分:0)

在第一个例子中,我分别在三个脚本标签中写了三个alert()(example)。发出警报(&#39;第一次&#39;)和警报(&#39;第三次&#39;)。

<script>alert('FIRST');</script>
<script>errorAlert('SECOND');</script>
<script>alert('THIRD');</script>

在第二个例子中,我在一个脚本标记(example)中写了三个alert()。仅触发警报(&#39; FIRST&#39;)。

<script>
alert('FIRST');
errorAlert('SECOND');
alert('THIRD');
</script>

答案 3 :(得分:0)

解析错误

添加到先前答案中的测试中,文档似乎提到脚本标记中的所有错误都限于该脚本元素,并且不会影响页面上的其他错误。对于解析阶段,处理如下:

<块引用>

如果 scriptElement 的脚本脚本为 null,则在 scriptElement 处触发一个名为 error 的事件,然后返回。

如果上一步失败,则将任务排队以在元素上触发名为 error 的事件,然后返回。否则,让 url 成为结果 URL 记录。

如果 scriptElement 的脚本脚本为 null,则在 scriptElement 处触发一个名为 error 的事件,然后返回。

处理运行时错误

一旦在脚本中检测到运行时错误,浏览器应在目标 error 上发出 scriptElement 事件。如果未处理此事件,则浏览器会将错误转发到开发者控制台。

error 事件具有以下接口:

interface ErrorEvent : Event {
  constructor(DOMString type, optional ErrorEventInit eventInitDict = {});

  readonly attribute DOMString message;
  readonly attribute USVString filename;
  readonly attribute unsigned long lineno;
  readonly attribute unsigned long colno;
  readonly attribute any error;
};

处理运行时脚本错误的行为是:

<块引用>

当用户代理要报告异常E时,用户代理必须针对相关脚本报告错误,在包含该脚本的资源中使用有问题的位置(行号和列号),使用由指定的全局对象脚本的设置对象作为目标。如果此后错误仍未处理,则可能会将错误报告给开发者控制台。

来源: https://html.spec.whatwg.org/multipage/webappapis.html#runtime-script-errors