很多网站为了隐藏来源地址和赚零花钱,都把外部链接先跳转到第三方网站,这直接导致使用效率的降低,每次都要等待各种读秒各种验证后才能继续访问。
为了解决这个问题,需要一个Chrome插件,去除跳转到第三方广告页面并将链接还原直接跳转到真实地址。
已支持的网站
- https://gfxfree.net/
- http://www.wplocker.com/
调用权限
- activeTab
内含文件
- manifest.json
- background.js
- content_script.js
manifest.json
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
{ "manifest_version": 2, "name": "Clear URL Redirection", "description": "This extension clear the Redirection of URL for the current page", "version": "1.0", "browser_action": { "default_icon": "Sample_icon2.png", "default_title": "Click here to Clear URL Redirection" }, "background": { "scripts": ["background.js"], "persistent": false }, "permissions": [ "activeTab" ] } |
background.js
1 2 3 4 5 |
// Called when the user clicks on the browser action. chrome.browserAction.onClicked.addListener(function(tab) { // No tabs or host permissions needed! chrome.tabs.executeScript(null, {file: "content_script.js"}); }); |
content_script.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
function replace_url(elem, attr) { var elems = document.getElementsByTagName(elem); for (var i = 0; i < elems.length; i++){ if(elems[i][attr].indexOf("http://ouo.io/s") >= 0 ){ var href_temp_arry = elems[i][attr].split("="); elems[i][attr] = href_temp_arry[1]; } if(elems[i][attr].indexOf("http://www.lolinez.com/?") >= 0 ){ var href_temp_arry = elems[i][attr].split("?"); elems[i][attr] = href_temp_arry[1]; } } console.log('done!'); } replace_url('a', 'href'); |
后记
Chrome中实现修改页面内容是通过在页面中注入JS来实现的,这个注入的动作有两种实现方法,一种是常驻后台并监听所有页面,然后在每个打开的标签中注入JS,另外一种就是只有在点击了插件图标后才会执行注入动作。
点击插件图标事件通过chrome.browserAction.onClicked.addListener()函数在background.js中添加监听,注入行为通过在监听函数中调用chrome.tabs.executeScript()方法来实现。
在知道了如何注入JS之后,接下来的事情就简单了,只需要在注入的JS代码中执行批量修改就可以了。在进行修改前,还需要验证URL是否是需要替换的目标URL,这个交给.indexOf方法来完成,这个方法原本是用于返回给定字符串在原字符串中的出现位置,在这里可以用于验证是否包含目标URL特征字符串,返回大于0即存在特征字符串。
在验证字符串存在替换特征后,下一步就是如何获取真实URL地址,因为原始链接中的真实的URL之前都有一个固定的分隔符,所以这里用.split方法对字符串进行分割,然后获取需要的真实URL地址。
在获取的真实URL地址之后,就可以对链接href属性重新赋值,替换原链接地址。
使用方法
打开开发者模式
载入插件
打开网页,点击插件图标,All Done!
There are no comments yet