【问题标题】:How to modify URL in loading page?如何修改加载页面中的 URL?
【发布时间】:2022-06-11 07:18:45
【问题描述】:

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


我之前为 Firefox 编写了一些 Web 扩展,但已经有几年了(有点不习惯)。但是出现了一个新问题,除了编写自己的 Webextension 之外,我找不到解决方案。

如何修改页面的 URL 并添加查询参数?我专门尝试修改 Google Docs 页面的 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 函数来做到这一点?它应该在请求的生命周期中的什么时候发生等?

【问题讨论】:

  • 我不确定在这里进行扩展的目的。你不能自己动手吗?你真的需要扩展才能拥有这个查询参数吗?
  • Bastien - 我可以手动添加该参数...每次我从我的 Google Drive 打开 Google Doc 时,但这让我觉得效率有点低,不?我想,一定有办法以编程方式做到这一点,因此我的问题是。

标签: javascript firefox-addon firefox-addon-webextensions


【解决方案1】:

注意:需要“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'};
  }
}

【讨论】:

  • @erosman...谢谢。在我开始尝试之前的一个问题——这段代码是否只会将查询参数添加到主页 URL 中? (这是期望的结果。)我想该页面可能会请求“docs.google.com/document”位置下的其他资源...此代码是否也会开始将查询参数添加到所有“幕后”HTTP 请求中?
  • @LordNull 'main_frame' 表示顶部框架,即标签 URL 或网页 URL,而不是其他请求。
  • 感谢@erosman,它运行良好。我将单击“接受答案”按钮,但只想注意“if”语句只需要一个额外的括号……以防其他人尝试使用该代码。 ?
猜你喜欢
  • 1970-01-01
  • 2020-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-13
  • 2016-12-10
  • 2020-04-20
相关资源
最近更新 更多