我正在玩扩展。如果用户安装了扩展程序,我想捕获他们在网页上单击的链接。不太清楚如何做到这一点,但看起来很简单。我可以补充说,只要插件安装并启用,我希望这种情况发生,但不要让用户必须在工具栏中做任何事情来“激活”它。
不确定如何开始。我想我有一个太多的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
}
答案 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请求。