V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
lisianthus
V2EX  ›  问与答

关于 js 的错误捕获问题

  •  
  •   lisianthus · 2023-03-12 22:02:17 +08:00 · 1027 次点击
    这是一个创建于 603 天前的主题,其中的信息可能已经有所发展或是发生改变。

    同一份 js ,在不同的浏览器运行可能会有兼容性问题,比如浏览器不支持 ES6 时使用 const 会抛出 SyntaxError: Unexpected keyword 'const'。

    在 html 里引入了两个 js ,请问能否在 a.js 里做一些操作,捕获到 b.js 里发生的语法错误,方便定位问题?

    <script src="a.js"></script>
    <script src="b.js"></script>
    
    5 条回复    2023-03-14 10:44:08 +08:00
    xiangyuecn
        1
    xiangyuecn  
       2023-03-12 22:14:52 +08:00   ❤️ 1
    view-source:https://xiangyuecn.gitee.io/recorder/QuickStart.html

    window.onerror=function(message, url, lineNo, columnNo, error){
    //https://www.cnblogs.com/xianyulaodi/p/6201829.html
    reclog('<span style="color:red"> [Uncaught Error] '+message+'<pre>'+"at:"+lineNo+":"+columnNo+" url:"+url+"\n"+(error&&error.stack||"不能获得错误堆栈")+'</pre></span>');
    };

    《 Recorder H5 QuickStart: 快速入门》看那个页面源码,还有 cdn 自动选择功能,jsdelivr 访问不了,就会切换到 unpkg
    你的直接就在 script 之前绑定 onerror 进行处理就 oJBk 了
    lisianthus
        2
    lisianthus  
    OP
       2023-03-13 14:45:42 +08:00
    @xiangyuecn
    我拿电视盒子试了下,大部分盒子都可以用 window.onerror 捕获到错误,但有几个盒子压根没反应😂
    qianlige
        3
    qianlige  
       2023-03-13 15:57:37 +08:00
    @lisianthus 执行先后顺序有关?有可能你的 onerror 执行在报错之后了呢
    lisianthus
        4
    lisianthus  
    OP
       2023-03-13 19:29:33 +08:00
    @qianlige
    不是的,可以肯定 onerror 在错误之前就执行了。
    我觉得可能跟盒子 webview 有关,有些性能很差的盒子 webview 需要代码兼容到 IE6 、IE7 才能运行,还有些是被运营商魔改过的
    qianlige
        5
    qianlige  
       2023-03-14 10:44:08 +08:00
    如果说魔改的话,可能是 onerror 事件被改写了,试着用 addEventListener 或者 attachEvent 来添加监听?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3483 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 10:44 · PVG 18:44 · LAX 02:44 · JFK 05:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.