如何修改Chrome扩展名页面上的所有链接?

时间:2015-01-19 21:34:45

标签: javascript jquery google-chrome google-chrome-extension

我正在教自己如何编写Chrome扩展程序,但我无法启动并运行基本功能。

我正在尝试编写一个修改指定页面上所有链接的扩展程序。作为概念验证,我正在尝试修复它,以便google.ca结果页面上的所有链接指向www.gooogle.cn

这是我的manifest.json

"name": "Google Link Fixer",
  "version": "0.1",
  "permissions": ["*://www.google.*/*"],

  "content_scripts": [
    {
      "matches": ["*://www.google.*/*"],
      "js": ["jquery.js", "content_script.js"]
    }
  ],
  "manifest_version": 2
}

以下是content_script.js中的javascript(请注意jquery.js位于同一目录中):

$(document).ready(function(){
$("a[href^='https://www.google.ca']")
   .each(function()
   { 
      this.href = this.href.replace(/^https:\/\/www\.google\.ca/, 
         "https://www.google.cn");
   });
});

而且......没什么。我可以在开发人员工具中看到正在加载扩展,代码在Content Scripts下,但我没有看到预期的结果。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:2)

我希望我能够将@charlietfl给出的答案标记为正确答案。它让我走上正轨。

我的剧本有两个问题:

  1. 我用作概念验证的Google搜索结果页面使用的是相对链接,而不是绝对的链接,因此我的替换函数(正确地)找不到正则表达式模式/^https:\/\/www\.google\.ca/教训:不要指望Google提供的“简单”页面包含简单的HTML。

  2. 据我所知,Google至少会动态创建一些链接 - 这种模式在其他网站上也很常见。我在专用的点击处理程序中重写了脚本,这就是让我走上正轨的原因。 课程:仔细考虑你想要完成的事情。我并没有试图改变页面上的所有链接;我想重定向某些链接指向的位置。在链接点击级别然后在整页级别上进行行为修改更有效 - 并且更容易实现。

  3. 我使用的代码是:

    $(document).on("click", "a", function(){
        var link_target = $(this).attr('href');
        var converted_url = link_target.replace(/SOME_REGEX/, REPLACEMENT_TEXT);
        $(this).attr('href', converted_url);
    });