【问题标题】:Unexpected use of 'self' no-restricted-globals React意外使用“自我”无限制全局反应
【发布时间】:2017-05-31 18:46:22
【问题描述】:

尝试为我的 PWA 应用程序编写 Service Worker,发现此错误。我为服务人员使用了 Google/Mozilla 示例,但是,无论如何。

var CACHE_NAME = 'test-cache';
var urlsToCache = [
    '/'
];

self.addEventListener('install', function (event) {
    event.waitUntil(
        caches.open(CACHE_NAME)
            .then(function (cache) {
                console.log('Opened cache');
                return cache.addAll(urlsToCache);
            })
    );
});

【问题讨论】:

  • self.addEventListener 中的self 指的是什么?
  • 服务工作者对象,我想。
  • 我使用了 Mozilla PWA 示例。但我不明白为什么连这段代码都不起作用
  • 我也面临同样的问题。按照这里的示例:engineering.musefind.com/…

标签: javascript reactjs


【解决方案1】:

使用window.self 而不是self

【讨论】:

  • 通过使用window.self 消失。但是正在安装的addEventListener 实际上并没有安装服务工作者
  • 我不明白为什么这个答案的评价如此之高。问题是关于访问 ServiceWorker 中的全局对象。 ServiceWorkers 和 WebWorkers 都没有 window 对象,所以这个建议不起作用。使用self 访问全局对象是正确的做法。这条规则应该被禁用@Fraction 在下面指出。
  • 被否决的答案。 self 和 window.self 在 nor-browser 环境中不是一回事,例如服务人员。参考:stackoverflow.com/a/3638982/6196679
  • 我否决了这个答案。如前所述,worker 没有全局范围的窗口快捷方式。
  • 投了反对票,因为这个答案不正确,不应该被评为这么高。
【解决方案2】:

您可以从no-restricted-globals 规则中显式删除self,或者简单地使用eslint-disable-lineeslint-disable-next-line 禁用包含self 的行的规则:

self.addEventListener('install', function (event) { /* eslint-disable-line no-restricted-globals */
...

或者

/* eslint-disable-next-line no-restricted-globals */
self.addEventListener('install', function (event) {
...

【讨论】:

    【解决方案3】:

    添加var self = this;或使用this.addEventListener(...)

    【讨论】:

    • this.addEventListener is not a function
    猜你喜欢
    • 2019-02-26
    • 2020-11-08
    • 2019-01-27
    • 2021-12-29
    • 2020-07-27
    • 2019-11-05
    • 1970-01-01
    • 1970-01-01
    • 2014-12-24
    相关资源
    最近更新 更多