捕获用户在页面上单击的链接

时间:2012-04-24 00:35:18

标签: google-chrome google-chrome-extension

我正在玩扩展。如果用户安装了扩展程序,我想捕获他们在网页上单击的链接。不太清楚如何做到这一点,但看起来很简单。我可以补充说,只要插件安装并启用,我希望这种情况发生,但不要让用户必须在工具栏中做任何事情来“激活”它。

不确定如何开始。我想我有一个太多的JS文件,但只是试图让其中一个登录到控制台。也没有。我的最终目标是,如果他们去某些地方,我想将它们重定向到内部网页。

background.js

var redirectedSites = ["https://www.facebook.com/profile.php?id=<SOMEPROFILEID>"];
// when the browser tries to get to a page, check it against a list
chrome.webRequest.onBeforeRequest.addListener(
    function(details) {
        console.log('is this even getting hit?');
        for(var i=0; i < redirectedSites.length; ++i) {
            // if the attempt is to a listed site, redirect the request
            if( details.url == redirectedSites[i] )
               return {redirectUrl: "http://intranet/landing?from=" + details.url };
         }
    },
    {urls: ["*://www.facebook.com/*"]},
    ["blocking"]
);

的manifest.json

{
 "name": "Capture Click",
 "version": "0.1",
 "description": "Simple tool that logs clicked links.",
 "permissions": [
"tabs",
"webRequest",
"webRequestBlocking",
    "https://*.facebook.com/*"
 ],
"background": {
   "scripts": ["background.js"]
 },
 "manifest_version": 2
}

1 个答案:

答案 0 :(得分:2)

我在评论中给出了一些建议,但解决实际更大问题的最佳方法是使用webRequest处理程序:

var redirectedSites = ["http://www.google.com/foobar", ...];
// when the browser tries to get to a page, check it against a list
chrome.webRequest.onBeforeRequest.addListener(
    function(details) {
        for(var i=0; i < redirectedSites.length; ++i) {
            // if the attempt is to a listed site, redirect the request
            if( details.url == redirectedSites[i] )
                return {redirectUrl: "http://intranet/landing?from=" + details.url };
        }
    },
    {urls: ["*://www.google.com/*"]},
    ["blocking"]);

这是一个非常简单的例子,但我希望你明白这个想法。这里,details.url是用户尝试访问的页面,返回的对象具有redirectUrl属性,可重定向访问页面的尝试。我的示例针对目标网站列表检查details.url;你可以使用正则表达式或其他更强大的东西。

请注意,这不仅会影响点击的链接和输入的网址,还会影响资源(scrips,图片)和Ajax请求。