Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.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 从服务工作者处获取页面URL参数_Javascript_Url_Service Worker_Url Parameters_Url Parsing - Fatal编程技术网

Javascript 从服务工作者处获取页面URL参数

Javascript 从服务工作者处获取页面URL参数,javascript,url,service-worker,url-parameters,url-parsing,Javascript,Url,Service Worker,Url Parameters,Url Parsing,如何从服务人员处获取带有参数的页面URL 我已经尝试了self.registration.scope,但这不包括参数。您可以获取waiting.scriptURL或active.scriptURL,将结果传递给URL()构造函数,获取对象的.search属性 navigator.serviceWorker.register("sw.js?abc=123") .then(function(reg) { const scriptURL = reg.waiting &&

如何从服务人员处获取带有参数的页面URL


我已经尝试了
self.registration.scope
,但这不包括参数。

您可以获取
waiting.scriptURL
active.scriptURL
,将结果传递给
URL()
构造函数,获取对象的
.search
属性

  navigator.serviceWorker.register("sw.js?abc=123")
  .then(function(reg) {
    const scriptURL = reg.waiting && reg.waiting.scriptURL || reg.active.scriptURL;
    const url =  new URL(scriptURL);
    const queryString = url.search;
    console.log(queryString);
  }).catch(function(err) {
    console.log("err", err);
  });

您可以获取
waiting.scriptURL
active.scriptURL
,将结果传递给
URL()
构造函数,获取
。搜索对象的属性

  navigator.serviceWorker.register("sw.js?abc=123")
  .then(function(reg) {
    const scriptURL = reg.waiting && reg.waiting.scriptURL || reg.active.scriptURL;
    const url =  new URL(scriptURL);
    const queryString = url.search;
    console.log(queryString);
  }).catch(function(err) {
    console.log("err", err);
  });

我不清楚您询问的是获取服务工作者脚本的URL,还是在服务工作者作用域下打开的所有客户端页面的URL。所以以下是如何做到这两个方面:

// Get a URL object for the service worker script's location.
const swScriptUrl = new URL(self.location);

// Get URL objects for each client's location.
self.clients.matchAll({includeUncontrolled: true}).then(clients => {
  for (const client of clients) {
    const clientUrl = new URL(client.url);
  }
});
在这两种情况下,一旦有了
URL
对象,如果您对查询参数感兴趣,可以使用它:

if (url.searchParams.get('key') === 'value') {
  // Do something if the URL contains key=value as a query parameter.
}

我不清楚您询问的是获取服务工作者脚本的URL,还是在服务工作者作用域下打开的所有客户端页面的URL。所以以下是如何做到这两个方面:

// Get a URL object for the service worker script's location.
const swScriptUrl = new URL(self.location);

// Get URL objects for each client's location.
self.clients.matchAll({includeUncontrolled: true}).then(clients => {
  for (const client of clients) {
    const clientUrl = new URL(client.url);
  }
});
在这两种情况下,一旦有了
URL
对象,如果您对查询参数感兴趣,可以使用它:

if (url.searchParams.get('key') === 'value') {
  // Do something if the URL contains key=value as a query parameter.
}

我提供的调用
self.clients.matchAll()
的示例代码将允许您获取当前服务工作者范围内所有打开页面的URL。我的错,我误解了,第一种方法显然是获取脚本的位置。删除我的评论以避免进一步混淆。我提供的调用
self.clients.matchAll()
的示例代码将允许您获取当前服务人员范围内所有打开页面的URL。我的错,我误解了,第一种方法显然是获取脚本的位置。删除我的评论以避免进一步混淆。