1

今天是个好日子!我决定第一次尝试为 Chrome 制作扩展程序,我有这个想法,但我不知道如何开始。我希望你能指出我正确的方向。

我想检测是否打开了某个 URL,然后更改其查询字符串之一的值。例如:

  1. 我打开页面http://downloadpage.url/?page=info&id=123456
  2. 扩展程序将检测到这一点并将查询字符串“page”值从“info”更改为“download”,并继续使用新值打开页面。

我该怎么做呢?我认为所需的权限是 WebRequest 和 WebRequestBlocking 但我不确定。我在这里尝试了这些步骤:检测 URL 是否已打开 - Chrome 扩展,但即使将 background_page 更改为背景以说明我的清单版本(我的 Chrome 版本是 21.0.1180.89),它似乎也不起作用。我希望我可以在那里修改代码,但不幸的是它对我不起作用,现在我迷路了。

4

1 回答 1

1

按照 Rob W 在上面评论中的链接(谢谢 Rob!),我想出了一些可以根据我想要的工作的代码。首先,当我在预期的 URL 中时,我将以下内容添加到清单中以运行内容脚本:

  "content_scripts": [
     {
       "matches": [
          "http://downloadpage.url/*"
       ],
       "js": ["background.js"]
     }
  ]

显然网址是假的……

然后使用以下函数创建了一个名为 background.js 的文件,这使得获取查询字符串变得容易。原始代码来自这里,我对其进行了一些修改以使其可重用于其他链接或字符串。:

function getQueryString(URL) {
  if (!URL) {
    URL = location.search;
  }
  else
  {
    var a = document.createElement('a');
    a.href = URL;
    URL = a.search;
  }

  var result = {}, queryString = URL.substring(1),
      re = /([^&=]+)=([^&]*)/g, m;

  while (m = re.exec(queryString)) {
    result[decodeURIComponent(m[1])] = decodeURIComponent(m[2]);
  }

  return result;
}

最后,使用修改后的查询字符串进行重定向的代码如下:

if (page == "info")
{
  var ID = getQueryString()["id"];

  location.replace('http://downloadpage.url/?page=download&id='+ID;);
}

我仍然愿意接受更好、更优雅的解决方案,但这正是我想做的。如果您有更好的想法,请告诉我。干杯!

于 2012-09-24T00:06:25.380 回答