gpt4 book ai didi

javascript - 捕获头脚本中的js解析错误

转载 作者:行者123 更新时间:2023-11-28 05:39:50 26 4
gpt4 key购买 nike

我正在使用一个基本的加载器在我的页面中按需加载一些js。在一台或两台计算机上(我无权访问这些计算机),我收到诸如“Uncaught SyntaxError:xxx 中无效或意外的 token ”或“Uncaught SyntaxError:意外 token 非法”之类的错误。

当然,源文件没问题,并且可以在数千个客户端上运行。可以肯定,这一定是某种防病毒软件正在修改我的 js 文件,但我想知道发生了什么,看看我是否可以阻止或至少通知客户这一点。

我的问题是我正在使用 XMLHttpRequest 加载脚本,并且在加载时我将文本附加到标题中,例如

request.onload = function () {
var txt = request.responseText + "\n//# sourceURL=" + file + "\n";
try {
var script = domDocument.createElement("script"),
head = domDocument.head || domDocument.getElementsByTagName("head")[0];

script.defer = true;
script.text = txt;
head.appendChild(script);
} catch (e) {
domWindow.onerror("Error loading js.", file, 0, 0, e, txt);
}

request.onload = function () { };
};

其中“file”指向服务器上的文件。问题是,catch 永远不会执行,因为浏览器似乎很乐​​意执行上面的代码,然后解析/抛出实际的错误。

我想知道是否可以以某种方式捕获加载脚本中的错误,以便我可以报告浏览器真正收到的内容而不是我的 js。

最佳答案

try catch 单独无法捕获在解析时发生的语法错误。据我所知,捕获语法错误的唯一方法是使用 eval

try{
var txt = request.responseText + "\n//# sourceURL=" + file + "\n";
eval(txt);
var script = domDocument.createElement("script"),
head = domDocument.head || domDocument.getElementsByTagName("head")[0];

script.defer = true;
script.text = txt;
head.appendChild(script);
}catch(er){
console.log(er);
}

我不推荐这种方法。最好通过 url 加载脚本文件,然后监听 script 标记和 window 对象上的 error 事件;

window.onerror = function(msg, url, lineNo, columnNo, error){
console.log(msg, url, lineNo, columnNo, error);
}
var script = domDocument.createElement("script"),
head = domDocument.head || domDocument.getElementsByTagName("head")[0];

script.defer = true;
script.onerror = function(er){
console.log(er);
};
script.onload = function(){
console.log('script loaded');
};
script.src = '/path/to/script.js';
head.appendChild(script);

关于javascript - 捕获头脚本中的js解析错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39019798/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com