Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.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 在web应用中注册内联服务工作人员_Javascript_Google Apps Script_Service Worker_Web Notifications - Fatal编程技术网

Javascript 在web应用中注册内联服务工作人员

Javascript 在web应用中注册内联服务工作人员,javascript,google-apps-script,service-worker,web-notifications,Javascript,Google Apps Script,Service Worker,Web Notifications,我正在尝试将web推送通知添加到使用应用程序脚本托管的web应用程序中。为此,我需要注册一个服务工作者,我遇到了一个跨域请求错误。原始内容由*.googleusercontent.com托管,而脚本URL为script.google.com/* 我能够成功地创建一个内联工作程序,使用脚本创建从blob创建的内联URL。现在我被困在浏览器中注册工作人员的问题上 以下模型有效: HTML 服务人员 self.onmessage=函数(e){ self.postMessage('msg from

我正在尝试将web推送通知添加到使用应用程序脚本托管的web应用程序中。为此,我需要注册一个服务工作者,我遇到了一个跨域请求错误。原始内容由
*.googleusercontent.com
托管,而脚本URL为
script.google.com/*

我能够成功地创建一个内联工作程序,使用脚本创建从
blob
创建的内联URL。现在我被困在浏览器中注册工作人员的问题上

以下模型有效:

HTML


服务人员


self.onmessage=函数(e){
self.postMessage('msg from worker');
};
log(“[Service Worker]进程已启动”);
})
在线安装


函数日志(msg){
var fragment=document.createDocumentFragment();
appendChild(document.createTextNode(msg));
fragment.appendChild(document.createElement('br'));
document.querySelector(“#log”).appendChild(片段);
}
//使用脚本创建对象
var blob=新blob([document.querySelector(“#worker”).textContent]);
//为obejct分配一个绝对URL以进行托管
var-worker=new-worker(window.URL.createObjectURL(blob));
worker.onmessage=函数(e){
日志(“收到:+e.数据”);
}
worker.postMessage('start');
//navigator.serviceWorker.register(工作者)此行失败
navigator.serviceWorker.register(worker)
返回
400:错误的HTTP响应代码
错误


可以安装内联工人吗?或者所有安装的工作人员都必须来自外部脚本吗?

值得注意的是,与推送通知一起使用的Web工作人员和服务工作人员是不同的(请参阅)

根据MDN服务人员的说法。在Google Apps脚本中,您可以为服务人员文件提供以下内容:

function doGet(e) {
  var file = e.parameter.file;
  if (file == 'service-worker.js'){
    return ContentService.createTextOutput(HtmlService.createHtmlOutputFromFile('service-worker.js').getContent())
                         .setMimeType(ContentService.MimeType.JAVASCRIPT);
  } else {
    return HtmlService.createHtmlOutputFromFile('index');
  }
}
但与()一样,由于web应用的服务方式,您将遇到以下错误:

SecurityError:注册ServiceWorker失败:脚本资源位于不允许的重定向后面


有一个版本,但仍在草稿中。

值得注意的是,与推送通知一起使用的Web工作人员和服务工作人员是不同的(请参阅)

根据MDN服务人员的说法。在Google Apps脚本中,您可以为服务人员文件提供以下内容:

function doGet(e) {
  var file = e.parameter.file;
  if (file == 'service-worker.js'){
    return ContentService.createTextOutput(HtmlService.createHtmlOutputFromFile('service-worker.js').getContent())
                         .setMimeType(ContentService.MimeType.JAVASCRIPT);
  } else {
    return HtmlService.createHtmlOutputFromFile('index');
  }
}
但与()一样,由于web应用的服务方式,您将遇到以下错误:

SecurityError:注册ServiceWorker失败:脚本资源位于不允许的重定向后面


曾经有过一次,但仍在起草中。

关于国外取货,最近从服务人员那里删除了。请参阅和About Foreign Fetch上的相关问题,它最近已从服务人员中删除。请参阅和上的相关问题