如何从同步存储修改谷歌Chrome扩展的URL?

bwleehnv  于 2023-05-20  发布在  Go
关注(0)|答案(1)|浏览(169)

用例

当您使用多个Google帐户登录时,Google开始在Google URL ...<googleservice>.google.com/home/dashboard?authuser=1中添加查询参数authuser=X
我希望能够从扩展设置authuser参数的默认值。

问题

作为Chrome扩展和前端的初学者,我不确定使用哪个API来更新值以平滑体验,即使用户手动输入或我从另一个选项卡或程序单击链接,URL也会更新。

到目前为止

现在我有popup,它可以从storage.sync读取文本字段。

常见问题

1.代码应该在哪里?content_script或`service worker,还是两者都有?
1.使用哪个API?

  1. window.location
  2. chrome.tabs
  3. declarativeNetRequest
  4. chrome.webRequest
    我很感激你的建议和帮助。
c2e8gylq

c2e8gylq1#

由于重定向规则是静态文本,因此很简单,您只需要popup和declarativeNetRequest API,而不需要内容脚本或后台脚本(service worker)。
manifest.json:

"permissions": ["declarativeNetRequestWithHostAccess"],
  "host_permissions": ["*://*.google.com/"],
  "action": {"default_popup": "popup.html"}

popup.html:

<input id=inp><button id=save>Save</button><div id=err></div>
<script src=popup.js></script>

popup.js:

document.getElementById('save').onclick = () => {
  chrome.declarativeNetRequest.updateDynamicRules({
    removeRuleIds: [1],
    addRules: [{
      id: 1,
      condition: {
        resourceTypes: ['main_frame', 'sub_frame'],
        urlFilter: '||google.com/home/dashboard*',
      },
      action: {
        type: 'redirect',
        redirect: {
          transform: {
            queryTransform: {
              addOrReplaceParams: [{
                key: 'authuser',
                value: document.getElementById('inp').value,
              }],
            },
          },
        },
      },
    }],
  }).catch(e => {
    document.getElementById('err').textContent = e.message;
  });
};

相关问题