一起来做chrome扩展《可配置的代理》
一、本文主要涉及相关内容:
- chrome.proxy
- pacScript
- browser_action
- popup
- localStroage
二、预览
(代理运行截图,图中的代理服务器有防火墙,暂不对外)
如图所示,代理配置界面通过点击browser_action按钮打开,在popup页面内进行。可以设置服务器,也可以添加删除站点。好了,开始一些简单的说明工作
三、proxy
在chrome扩展中,要使用proxy同任何一种chrome对象一样,需要在json配置中允许chrome操作,在之前的几篇文章中都有介绍,像这样:
"permissions": [
"proxy"
]
这只是配置,我们需要在background.js中使用它,需要用到chrome.proxy api,像这样:
chrome.proxy.settings.set({value: config, scope: 'regular'},function() {});
标准写法,如果把这行代码写到background.js中,那浏览器在加载扩展的时候就会执行,如果需要触发去执行,写到function中就可以了。
代码中只有value和scope是可变的,scope对应的是regular,这里不多说,它有几组值,如果有兴趣可以看看官方文档,360上貌似也有。这里主要说config。
config是一个对象,像这样:
var config = {
mode: "pac_script",
pacScript: {
data: pac
}
};
其中mode也有几组值,这里只使用pac_script,因为我只用了它,已经可以满足我们配置启用代理访问站点的需求,其它几组值,也可以去看看文档。
四、pacScript
pac是变量,它是一个字符串,一个pac_script的字符串,像这样:
var pac = "var FindProxyForUrl = function(url, host){return 'DIRECT';}";
return 'DIRECT',表示不使用代理服务,从这个function可以看出,扩展是不使用代理的。下面对这个pac_script进行一点点扩展让它支持按配置站点启且代理,像这样:
var FindProxyForUrl = function(url, host) {
if (shExpMatch(url, "*google.com*")) {
return 'PROXY 112.124.25.173:7071';
}
return 'DIRECT';
}
条件中,使用shExpMatch来检测访问的url地址是不是匹配*google.com*,*号代表模糊匹配,可以看出它是一个包含关系,只要链接地址中带有可匹配的字符串,都算成立。那么如果访问google.com相关的站点,都会通过PROXY代理服务去访问。多个站点,也就是多成立条件,写法随意。
添加/删除站点和配置代理服务器的时候,也就是动态的去生成这样一个pac_script,利用localStroage来保存它就可以了。重要的一点,给到pac的不是这个function,而是一个字符串,所以,要把这些字符全变成字符串才能正常运行。
关于pacScript有相关的介绍,有兴趣可以去搜搜看。
五、browser_action和popup
browser_action,可以简单的理解为chrome地址栏边上的小按钮,要开启它,同样需要在json中配置,像这样:
"browser_action": {
"default_icon": "images/logo.png",
"default_title": "UnProxy",
"default_popup": "html/popup.html"
}
很显示icon就是那个小图标,title,就是鼠标放上去后的提示文本,popup就是点击小图标后的弹层。
如果指定了popup,点击小图标就会打开popup对应的在扩展目录中的html文件,这个html和content_script一样,可以加载script和css,但不能在里面写script代码,script代码必须放到一个js文件中,通过加载进来。
在popup.html中,绘界面,发起向background.js的请求,接受background.js的返回信息,都和content_script一模一样,不熟悉的同学可以看看前几篇文章,这里就不介绍了。
六、结尾
好了,一个代理扩展相关的点就这些,当然,有些并不是必须的,可以灵活使用。完整的代码可以看看我的github,也可以下载使用这个代理扩展:UnProxy,已经发布在了chrome 扩展商店里。默认的代理服务器是我自己搭的,正如前面所说,有防火墙,如果你想测试,可以联系我把你的IP加入白名单。
源码:
https://github.com/onlyfu/UnProxy
下载crx:
https://github.com/onlyfu/UnProxy/tree/master/dist
感谢阅读,下次会介绍做一个postman功能的扩展。现目前简单版的postman已经不更新了,新版虽然强大,但使用仍没有简单版的便捷,所以,下次一起来做个REST Client扩展吧。
一起来做chrome扩展《可配置的代理》的更多相关文章
- 一起来做chrome扩展《页面右键菜单》
本文主要内容 contextMenus的设置 打开权限 创建菜单 点击菜单 background script向content script发送消息 1. contextMenus的设置 1.1 打开 ...
- 一起来做chrome扩展《本地存储localStorage》
chrome中的本地存储其实也是用的HTML5中localStorage,唯一区别是chrome扩展有自己的localStorage,它属于这个扩展,而不属于一个域名.得用这一点可以很好的处理扩展自己 ...
- 一起来做chrome扩展《AJAX请求》
chrome在一次更新之后,出于安全考虑,完全的禁止了content_script从https向http发起ajax请求,即使正常情况下也会在console里给出提示.这对于WEB来讲是好事,但对于扩 ...
- 一起来做chrome扩展《基础介绍》
首先说明,chrome的扩展并不它的插件,网上很多说写插件,其实都是说的扩展.写扩展并不复杂,只要根据chrome提供的一系列的API进行就可以实现很多的功能.只是对API的学习是有代价的,加上国内访 ...
- 解决高版本 Google Chrome 扩展程序强制停用问题 -摘自网络
1]前往这里下载你喜欢的语言的组策略模板 后缀为.adm (其他的文件自己看 https://docs.google.com/viewer?a=v&pid=sites&srcid=Y2 ...
- chrome扩展,如何阻止浏览自动关闭桌面通知.
(!!!!以前的好用的, 现在不行了~) 做chrome扩展桌面通知, 可能不想让浏览器自动关闭某个重要的桌面通知.那就不要使用 chrome.notifications.create 可以用 Web ...
- 清除页面广告?身为前端,自己做一款简易的chrome扩展吧
大家肯定有这样的经历,浏览网页的时候,左右两端广告,诸如“屠龙宝刀,点击就送”,以及最近火的不行的林子聪37传奇霸业什么“霸业面具,霸业吊坠”的魔性广告总是充斥我们的眼球. 当然有现成的扩展程序或者插 ...
- 自己做一款简易的chrome扩展--清除页面广告
大家肯定有这样的经历,浏览网页的时候,左右两端广告,诸如“屠龙宝刀,点击就送”,以及最近火的不行的林子聪37传奇霸业什么“霸业面具,霸业吊坠”的魔性广告总是充斥我们的眼球. 当然有现成的扩展程序或者插 ...
- 手把手教你开发chrome扩展一:开发Chrome Extenstion其实很简单
手把手教你开发chrome扩展一:开发Chrome Extenstion其实很简单 手把手教你开发chrome扩展一:开发Chrome Extenstion其实很简单 手把手教你开发Chrome扩 ...
随机推荐
- 【Network】golang 容器项目 flannel/UDP相关资料
参考资料: flannel_百度搜索 Flannel首页.文档和下载 - 容器集群子网 - 开源中国社区 docker下基于flannel的overlay网络分析 - OPEN 开发经验库 flann ...
- 使用jvisualvm.exe 的Btrace插件介绍/使用教程
一.背景 在生产环境中可能经常遇到各种问题,定位问题需要获取程序运行时的数据信息,如方法参数.返回值.全局变量.堆栈信息等.为了获取这些数据信息,我们可以 通过改写代码,增加日志信息的打 ...
- ACM/ICPC 之 Unix会议室(POJ1087)
采用EK算法解网络流经典题,本题构图思路比较明确. //Unix会议室插座转换 //网络流-EK算法 //Time:47Ms Memory:1188K #include<iostream> ...
- 【转】android中ListView的定位:使用setSelectionFromTop实现ListView的position的保持
如果一个ListView太长,有时我们希望ListView在从其他界面返回的时候能够恢复上次查看的位置,这就涉及到ListView的定位问题: 解决的办法如下: 1 2 3 4 5 6 7 // 保存 ...
- Assertion failure in -[UITableView _configureCellForDisplay:forIndexPath:]
今天遇到了Assertion failure in -[UITableView _configureCellForDisplay:forIndexPath:]这个错误,一直也没有百度,不料想却弄了一个 ...
- java类读取properties文件
package com.bshinfo.el.userInfo.util; import java.io.BufferedReader;import java.io.File;import java. ...
- js验证输入的金钱格式
<html> <head> <title>js验证输入的金钱格式</title> <script type="text/javascri ...
- git学习(二):查看状态和具体改动
查看仓库状态 git status 可以查看有没有文件改动 查看改动情况 git diff readme.txt 以readme.txt为例,可以看readme.txt的改动情况,但对于二进制文件来说 ...
- windows消息钩子注册底层机制浅析
标 题: [原创]消息钩子注册浅析 作 者: RootSuLe 时 间: 2011-06-18,23:10:34 链 接: http://bbs.pediy.com/showthread.php?t= ...
- Spring--通过注解来配置bean【转】
Spring通过注解配置bean 基于注解配置bean 基于注解来配置bean的属性在classpath中扫描组件 组件扫描(component scanning):Spring能够从classpat ...