首先,我将说明我想要实现的目标:我希望有一些代码通过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
。
答案 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