首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Chrome扩展:当指向新页面时,在发送URL请求之前,用不同的值替换各种URL参数

Chrome扩展:当指向新页面时,在发送URL请求之前,用不同的值替换各种URL参数
EN

Stack Overflow用户
提问于 2021-03-21 08:03:09
回答 1查看 394关注 0票数 1

当我单击一个链接(或被一个站点重定向)时,我希望用一个不同的通用值替换请求URL中的各种跟踪参数的值。对于这个例子,让我们使用我的用户名,这样一个链接指向

代码语言:javascript
运行
复制
www.abc.com/?utm_source=originalsource&utm_campaign=originalcampaign&cid=originalcid&gclid=originalgclid

会变成www.abc.com/?utm_source=WTTDOTM&utm_campaign=WTTDOTMcampaign&cid=WTTDOTM&gclid=WTTDOTM

重要的是,在发送请求之前对这些参数进行编辑,因为这样做是为了避免UTM/cid/gclid/etc跟踪,并在查看这些跟踪参数的人的流量数据中留下标记。我知道我必须使用webRequest,逻辑看起来很简单,但我不知道如何用js动态地在URL中找到和替换。这个答案看起来是我所要求的最接近的,但我不知道只修改一个URL的较小的片段会如何工作,因为我对javascript非常缺乏经验,而且我大部分的编码知识都只是把东西放在一起,直到它起作用为止。

首先是一个简单的子问题,我的问题是:在请求页面之前,如何使用webRequest API在utm_campaign=***中替换utm_campaign=WTTDOTM

编辑:

@wOxxOm感谢您的帮助!我想我现在已经有了总体结构,但我仍然在挣扎于正则表达式规则的格式,这是我非常不熟悉的。按照我的理解,规则^(.*?utm_source=)(.+?(?=\\&)|$)(.*) (和它的“中介”变体)将捕获'utm_source=‘之前的所有值到第1组中,在'&’之后捕获所有值(如果它是最后一个参数,则没有值)到第3组,然后我应该能够生成regexSubstition group1+WTTDOTM+group3,对吗?当我当前试图上传下面解压缩的扩展名时,会遇到一个错误,上面写着"rules.json: Rule 1“指定"regexFilter”键的不正确值。我想我只是格式化错误,但我不知道我需要修复什么。你能帮上忙吗?这是我的rules.json和manifest.json文件。

rules.json

代码语言:javascript
运行
复制
[
{
    "id": 1,
    "priority": 1,
    "action": {
      "type": "redirect",
      "redirect": {
        "regexSubstitution": "\\1WTTDOTM\\3"
      }
    },
    "condition": {
      "regexFilter": "^(.*?utm_source=)(.+?(?=\\&)|$)(.*)",
      "resourceTypes": [
        "main_frame"
      ]
    }
  },
{
    "id": 2,
    "priority": 2,
    "action": {
      "type": "redirect",
      "redirect": {
        "regexSubstitution": "\\1WTTDOTM\\3"
      }
    },
    "condition": {
      "regexFilter": "^(.*?utm_medium=)(.+?(?=\\&)|$)(.*)",
      "resourceTypes": [
        "main_frame"
      ]
    }
  }
]

manifest.json

代码语言:javascript
运行
复制
{
    "manifest_version": 2,
    "name": "WTTDOTM is a UTM",
    "version": "1.3",
    "permissions": [
    "declarativeNetRequest",
    "declarativeNetRequestFeedback",
    "<all_urls>"
],
    "description": "Replaces all UTM values with 'WTTDOTM'",
     "declarative_net_request" : {
    "rule_resources" : [{
      "id": "1",
      "enabled": true,
      "path": "rules.json"
    },
    {
      "id": "2",
      "enabled": true,
      "path": "rules.json"
    }],
    "icons": {
          "128": "icon128.png" }
 }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-23 00:42:34

使用正则表达式可能不是不可能做到这一点,但这将是令人沮丧的。您试图捕获的文本可能包含几乎任何内容,因此构建一个正则表达式来捕获--每个查询参数后面的内容和每个查询参数之后的内容--将非常困难。相反,我建议使用在URLSearchParams API中内置的Chrome。

结合Javascript的URL对象,您想要做的事情可能如下所示:

代码语言:javascript
运行
复制
const replaceTrackerParams = (urlString, replacementString) => {
  const url = new URL(urlString);
  const params = new URLSearchParams(url.search);

  // If campagin parameters exist, replace them
  params.has('utm_source') && params.set('utm_source', replacementString)
  params.has('utm_campaign') && params.set('utm_campaign', replacementString)

  // Return modified URL
  return url.hostname + '?' + params.toString() 
}

根据需要用更复杂的逻辑替换速记语法。

另一个答案是使用declarativeNetRequest,因为它是更新的、更有效的API。这是真的,但我认为它还不支持回调函数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66730060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档