如何在 Service Worker 中发出 JSONP 请求?

Posted

技术标签:

【中文标题】如何在 Service Worker 中发出 JSONP 请求?【英文标题】:How to make a JSONP request inside a Service Worker? 【发布时间】:2016-04-01 13:10:43 【问题描述】:

您可能知道,Service Worker 没有document。因此,许多像 this one 这样的 javascript 方法都不起作用。

我需要发出 JSONP 请求,因为 Blogger API 不使用 CORS 回答来自不同域的请求。

感谢您的回复。

【问题讨论】:

【参考方案1】:

Web Worker 全局有一个名为 importScripts 的方法,您可以使用它来包含脚本 url。

所以只要定义一个回调函数,将函数名作为callback的url参数,并将url传递给importScripts

webworker.js

function cb(data)
    console.log(data);


importScripts('http://example.com/jsonp.php?callback=cb');

【讨论】:

非常感谢!有用! (我用过self.cb = function (resp) 从 Chrome 71 开始,不允许运行时调用 importScripts:“在 Chrome 71 之前,在安装处理程序之外异步调用 importScripts() 将起作用。从 Chrome 71 开始,这些调用会引发运行时异常(除非之前在安装处理程序中导入了相同的 URL),与其他浏览器中的行为相匹配。” -- developers.google.com/web/updates/2018/10/…

以上是关于如何在 Service Worker 中发出 JSONP 请求?的主要内容,如果未能解决你的问题,请参考以下文章

Service-Worker addEventListener,如何使用事件参数?

与 Angular.js 控制器通信 service-worker

Rails 对 service-worker.js 的未知调用

@vue/cli-plugin-pwa 没有创建 service-worker.js

web worker 与 service worker

我如何在Service Worker中缓存动态URL?它与预缓存有关系吗?我正在使用ReactJS默认serviceWorker