意外使用'self'无限制全局变量React

Pan*_*yer 17 javascript reactjs

尝试为我的PWA应用程序编写服务工作者,请注意此错误.我使用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);
            })
    );
});
Run Code Online (Sandbox Code Playgroud)

Grz*_*icz 22

对于那些仍然有这个问题的人.解决方案是使用window.self而不是简单self.

  • 我不明白为什么这个答案评价这么高。问题是关于访问 ServiceWorker 中的全局对象。ServiceWorkers 和 WebWorkers 都没有“window”对象,因此此建议不起作用。使用“self”访问全局对象是正确的做法。应禁用@Fraction 下面指出的规则。 (6认同)
  • 通过使用 `window.self` 消失了。但是正在安装的 `addEventListener` 实际上并没有安装 service worker (4认同)
  • 被否决的答案。self 和 window.self 在非浏览器环境(例如 serviceworker)上不是同一件事。参考:/sf/answers/254728771/ (3认同)
  • 我对这个答案投了反对票。如上所述,工作人员没有全局范围的窗口快捷方式。 (3认同)
  • 被否决是因为这个答案不正确,不应该给予如此高的评价。 (3认同)

Fra*_*ion 12

您可以selfno-restricted-globals规则中明确删除或简单地禁用包含selfusingeslint-disable-line或的行的规则eslint-disable-next-line

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

或者

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


dpa*_*kar 6

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