检查是否打开了某个URL并更改了查询字符串值

时间:2012-09-23 14:00:06

标签: google-chrome google-chrome-extension

大家好!我决定第一次尝试为Chrome进行扩展,我有这个想法,但我不知道如何开始。我希望你能指出我正确的方向。

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

  1. 我打开页面http://downloadpage.url/?page=info&id=123456
  2. 扩展程序将检测到此情况并将查询字符串“page”值从“info”更改为“download”并继续打开包含新值的页面。
  3. 我该怎么做?我认为所需的权限是WebRequest和WebRequestBlocking,但我不确定。我尝试了这里的步骤:Detect if URL is opened - Chrome extension但是,即使将background_page更改为后台以考虑我的清单版本(我的Chrome版本为21.0.1180.89),它似乎也无效。我希望我可以修改那里的代码,但遗憾的是它对我不起作用,现在我迷路了。

1 个答案:

答案 0 :(得分:1)

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

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

显然网址是假的......

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

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;);
}

我仍然愿意接受更好,更优雅的解决方案,但这样做符合我的要求。如果你有更好的主意,请告诉我。干杯!