如何修改加载页面中的URL?

How to modify URL in loading page?

更新:我现在意识到,在下面描述的场景中,我需要小心无限循环,因为重定向到的页面与初始页面相同(减去添加的参数)。有没有人在 Webextensions 中有这方面的经验并且可以就如何最好地避免这些循环提供任何建议?


我以前为 Firefox 写过一些 Webextensions,但已经有几年了(有点不实践)。但是又出现了一个新问题,除了自己写一个Webextension,我看不出任何解决办法。

如何修改页面的 URL 并添加查询参数?我专门尝试修改 Google 文档页面的 URL 并添加查询参数 ?mode=html

例如,Google 文档 URL 可能如下所示: https://docs.google.com/document/d/7Ujfjsd69To7lInXFOdn49nAxLLhfn43fj43JHDTp87/edit

我希望创建一个扩展程序来修改 URL,使其变为: https://docs.google.com/document/d/7Ujfjsd69To7lInXFOdn49nAxLLhfn43fj43JHDTp87/edit?mode=html

(显然我只希望在加载的 URL 匹配 https://docs.google.com/document/d/* 时附加此参数)

任何人都可以指导我如何开始吗?我需要使用什么 extensionAPI 函数来做到这一点?它应该在请求生命周期的什么时候发生等等?

注意:需要“webRequest”和“webRequestBlocking”权限加上主机权限

// add a listener for https://docs.google.com/document/*
browser.webRequest.onBeforeRequest.addListener(process, {
    urls: ['https://docs.google.com/document/*'],
    types: ['main_frame']
  },
  ['blocking']
);

function process(details) {
  // check it doesn't have mode=html
  if (!details.url.includes('mode=html')) {
    // add &mode=html if URL already has search string, otherwsie ?mode=html
    return {redirectUrl: details.url + (details.url.includes('?') ? '&' : '?') + 'mode=html'};
  }
}