我正在尝试将网络推送通知添加到使用应用程序脚本托管的网络应用程序中。为此,我需要注册一个服务工作者,但我遇到了一个跨域请求错误。原始内容托管*.googleusercontent.com在脚本 URL 为script.google.com/*.
我能够使用这篇关于创建blob使用脚本创建的内联 URL 的帖子成功地创建内联工作者。现在我被困在浏览器中注册工作人员的地方。
以下模型有效:
HTML
<!-- Display the worker status -->
<div id="log"></log>
服务工作者
<script id="worker" type="javascript/worker">
self.onmessage = function(e) {
self.postMessage('msg from worker');
};
console.log('[Service Worker] Process started');
})
</script>
内联安装
<script>
function log(msg) {
var fragment = document.createDocumentFragment();
fragment.appendChild(document.createTextNode(msg));
fragment.appendChild(document.createElement('br'));
document.querySelector("#log").appendChild(fragment);
}
// Create the object with the script
var blob = new Blob([ document.querySelector("#worker").textContent ]);
// assign a absolute URL to the obejct for hosting
var worker = new Worker(window.URL.createObjectURL(blob));
worker.onmessage = function(e) {
log("Received: " + e.data);
}
worker.postMessage('start');
// navigator.serviceWorker.register(worker) this line fails
</script>
navigator.serviceWorker.register(worker);返回400: Bad HTTP response code错误。
可以安装 inline worker 吗?还是所有已安装的工作人员都必须来自外部脚本?