具有非git承诺的全局变量的服务工作者

时间:2017-05-25 15:01:19

标签: service-worker

在下面的脚本中,我正在编写一个firebase变量,而不是我的repo。我的firebase值都在一个文件中,其余的javascript导入那些使用ES6模块(和webpack)的文件。但是我应该如何从此服务工作文件

访问该数据
importScripts('https://www.gstatic.com/firebasejs/3.9.0/firebase-app.js');
importScripts('https://www.gstatic.com/firebasejs/3.9.0/firebase-messaging.js');

// Initialize the Firebase app in the service worker by passing in the config.messagingSenderId.
firebase.initializeApp({
  'messagingSenderId': "8033333334"
});
// firebase.initializeApp({
//   'messagingSenderId': config.messagingSenderId
// });

1 个答案:

答案 0 :(得分:1)

通过importScripts()引用的任何脚本都将在与主服务工作文件相同的ServiceWorkerGlobalScope中同步执行。这意味着它们共享相同的self全局,并且您知道在importScripts()完成后,它们将完全执行。

因此,如果你有一个名为bootstrap.js的脚本,它包含

self.config = self.config || {};
self.config.messagingSenderId = 'my_sender_id';

然后您可以在service-worker.js中执行以下操作:

importScripts(
  'bootstrap.js',
  'https://www.gstatic.com/firebasejs/3.9.0/firebase-app.js',
  'https://www.gstatic.com/firebasejs/3.9.0/firebase-messaging.js'
);

firebase.initializeApp({
  'messagingSenderId': self.config.messagingSenderId
});

由您决定是否bootstrap.js检查源控件,是否在构建期间动态生成它等等。