“窗口未定义”服务工作者

时间:2018-04-05 05:21:32

标签: service-worker

我正在尝试为我的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>

这是我的service_worker.js中的代码:

// 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');
        }
    });
});

我在控制台中看到此错误:“未捕获的ReferenceError:窗口未定义”

如何解决这个问题?

1 个答案:

答案 0 :(得分:13)

我正在编写代码:

// 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');
        }
    });
});

在service_worker.js文件中。服务工作者无权访问windowdocument等DOM元素。一旦我将上面的代码放在与html文件关联的单独的js文件中,它就可以了。我是PWA的新手和服务工作者的概念,这似乎是一个新手的错误。如果有人帮助别人,我会发布这个答案。