首页 > 解决方案 > 如何在 ServiceWorker 中获取自己的 URL 或主机名?

问题描述

在 ServiceWorker JavaScript 代码本身(不是页面代码)中,我想知道我自己的 URL。或者至少是自己的主机。

我需要这个,因为我想要来自我自己服务器的资源和来自其他服务器的资源的不同缓存行为。

换句话说:event.request.url总是一个带有主机和路径的 URL(如https://example.com/index.html)。我需要知道,这个 URL 是否来自与 ServiceWorker 本身来自的同一主机。

标签: javascripturlservice-worker

解决方案


在 service worker 执行上下文中,self设置为ServiceWorkerGlobalScope,它继承自WorkerGlobalScope. 有一个location属性WorkerGlobalScope可以为您提供所需的信息。

您可以通过以下辅助方法将其付诸实践以解决您的问题:

function isSameOrigin(urlString) {
  const urlOrigin = (new URL(urlString)).origin;
  return urlOrigin === self.location.origin;
}

推荐阅读