Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript &引用;“未定义窗口”;服务人员_Javascript_Django_Service Worker - Fatal编程技术网

Javascript &引用;“未定义窗口”;服务人员

Javascript &引用;“未定义窗口”;服务人员,javascript,django,service-worker,Javascript,Django,Service Worker,我正在为我的django项目注册一名服务人员。这是我用于注册的代码: <!-- register service worker --> <script type="text/javascript"> if('serviceWorker' in navigator) { window.addEventListener('load', function() { navigator.serviceWorker.register("{% url 'sw.j

我正在为我的django项目注册一名服务人员。这是我用于注册的代码:

<!-- register service worker -->
<script type="text/javascript">
  if('serviceWorker' in navigator) {
    window.addEventListener('load', function() {
      navigator.serviceWorker.register("{% url 'sw.js' %}").then(function(registration) {
        console.log("Service worker registered.");
        console.log("Registered at: "+registration.scope);
      });
    });
  }
</script>
我在控制台中看到此错误:
未捕获引用错误:未定义窗口


如何修复此问题?

我正在编写代码:

//应用程序安装横幅
window.addEventListener('beforeinstallprompt',函数(e){
e、 userChoice.then(函数(choiceResult){
控制台日志(choiceResult.Output);
如果(choiceResult.Output==‘已驳回’){
log(“用户已取消主屏幕安装”);
}否则{
log(“用户添加到主屏幕”);
}
});
});

在service_worker.js文件中。服务人员无权访问DOM元素,如
窗口
文档
。一旦我将上述代码放在与html文件关联的单独js文件中,它就可以工作了。我不熟悉PWAs和服务人员的概念,这似乎是一个新手的错误。如果对其他人有帮助,我将发布此答案。

您是否能够使用设置为“异常中断”的调试器来找出正在执行的行以及在什么上下文下执行?乍一看,您的注册脚本似乎是在ServiceWorker上下文中执行的(其中,
窗口
不可用)。@Dai它在此行窗口停止。addEventListener('beforeinstallprompt',函数(e)。我不知道它是否相关,但在“应用程序”选项卡中,服务人员不显示文件名,而是显示(索引)。我正在使用django,并将服务人员作为模板呈现。@Vishal我丢失了代码。您需要任何特定部分的帮助吗?我得到了解决方案。谢谢。@Vishal您能分享您得到的解决方案吗
// App install banner
window.addEventListener('beforeinstallprompt', function(e) {
  e.userChoice.then(function(choiceResult) {
    console.log(choiceResult.outcome);

    if(choiceResult.outcome == 'dismissed') {
      console.log('User cancelled home screen install');
    } else {
      console.log('User added to home screen');
    }
  });
});