【问题标题】:Why Raven.js/Sentry says jQuery is not defined为什么 Raven.js/Sentry 说 jQuery 没有定义
【发布时间】:2017-08-29 21:25:10
【问题描述】:

我在 Sentry 中遇到很多错误,说“ReferenceError: jQuery is not defined”,但与页面加载总数相比,它仍然很少发生。

<script src="/js/compiled/jquery.min-2fe08f7.js" defer></script>
<script src="/js/my-script-e6f35a4.js" defer></script>

my-script.js 类似于:

(function($) {
    $('h1').text('Hello world');
})(jQuery);

但我从 Sentry 报告中不知道为什么没有加载 jQuery。

哨兵面包屑中提供的唯一线索非常无用:

12:15:25 sentry ReferenceError: jQuery is not defined
12:15:25 sentry ReferenceError: jQuery is not defined
12:15:26 exception ReferenceError: jQuery is not defined

延迟脚本应该按照它们在文档中出现的顺序加载,所以我认为问题不在于异步加载。

也许 jQuery 文件在一些慢速设备上加载超时?或者文件在某个时刻在服务器上不可用?

这发生在我的各种 JS 文件和各种依赖项中,不仅是 jQuery。谁能建议我如何正确解决此类问题,或者至少将完整的控制台输出提供给 Sentry,包括对 JS 文件等资源的 HTTP 子请求失败,以找出实际原因?

提前致谢。

【问题讨论】:

  • 从 sentry 获取 URL 并访问页面并(页面源)检查您是否包含(jquery)文件不止一次?或者检查 ravan.js 是否必须包含在 jquery 文件之后。
  • 根据另一个答案,“你不能信任 defer”“在某些情况下,某些浏览器存在导致 defer 脚本无序运行的错误." 请参阅:stackoverflow.com/a/10731231
  • 你知道它出现在哪些浏览器上吗? stackoverflow.com/questions/32413279/…
  • 是的,它可能与延迟执行顺序中断有关。感谢您发布可能为其他人提供的相关参考,但现在已经快 4 年了,我什至不记得我在哪个项目上做这个了 :)

标签: jquery sentry raven


【解决方案1】:

您希望将您的代码包装在一个事件处理程序中,该处理程序仅在整个 DOM 准备好后才被触发,以保证在加载所有延迟脚本后运行。

如果 jQuery 可用,这通常是 $(document).ready() 调用,但由于不能保证,我建议在您的 my-script.js 文件中执行类似的操作

document.addEventListener("DOMContentLoaded", function(event) {
   (function($) {
     $('h1').text('Hello world');
   })(jQuery);
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-21
    • 1970-01-01
    • 2016-09-19
    • 2016-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多