chrome扩展程序----域名助手
音乐分享:
中年大叔的抖腿新专辑《The Far Field》
——————————————————————————————————————————————————————————————————————
项目截图:
项目地址:https://github.com/uustoboy/set-region
项目说明:
一般公司有线上环境和测试环境(还有可能要改host)
比如:
线上:http://www.xxx.com/xx/xx.html
测试:http://www.xxx.dev/xx/xx.html
这个chrome插件,主要功能就是简单的把当前打开的页面连接切换(不改host),
原理很简单就是利用JS正则比配字符串然后重新加载一遍路径;
项目截图:
目录说明:
|---manifest.json----------------配置文件
|---static-----------------------静态资源:css/img/js
|---template---------------------模板文件html
manifest.json(配置文件):
{
"name" : "域名助手",
"version": "0.1",
"manifest_version": 2,
"description": "域名助手:切换测试环境与正式环境",
"icons": {
"16": "static/img/icon16.png",
"48": "static/img/icon48.png",
"128": "static/img/icon128.png"
},
"browser_action": {
"default_icon": "static/img/icon16.png",
"default_title": "域名助手",
"default_popup": "template/setting_popup.html"
},
"background": {
"persistent": true,
"scripts": [
"static/js/jquery.min.js",
"static/js/settings.js",
"static/js/menus.js"
]
},
"permissions":[
"tabs",
"activeTab",
"storage",
"contextMenus"
]
}
template/setting_popup.html:(插件展示页)
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<title>域名助手</title>
<meta charset="utf-8">
<link rel="stylesheet" href="../static/css/reset.css">
<link rel="stylesheet" href="../static/css/popup.css"/>
<script type="text/javascript" src="../static/js/jquery.min.js"></script>
<script type="text/javascript" src="../static/js/settings.js"></script>
</head>
<body>
<div class="set-main">
<div class="set-title">
域名助手 <span class="slide-btn">[切换已添加页]</span>
</div>
<div class="set-warp">
<div class="set-slide">
<div class="set-left">
<div class="set-p fn-clear">
<div class="set-txt">原始域名:(http/https)</div>
<input type="text" name="" placeholder="字符串" value="" class="set-input input-origin">
<input type="checkbox" checked="checked" class="set-checkbox" name="" value="">
</div>
<div class="set-p">
<div class="set-txt">替换域名:(http/https)</div>
<input type="text" placeholder="字符串" checked="checked" name="" value="" class="set-input input-replace">
<input type="checkbox" checked="checked" class="set-checkbox" name="" value="">
</div>
<div class="set-p">
<div class="set-txt">别名:</div>
<input type="text" name="" placeholder="字符串" value="" class="set-input input-alias">
</div>
<div class="set-p">
<a href="javascript:;" class="set-btn set-add">添加</a>
<a href="javascript:;" class="set-btn set-switch">切换</a>
</div>
</div>
<div class="set-right">
<div class="set-list">
<ul>
</ul>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
static/js/settings.js(主页面js):
let region={};
let Max_Size = 10; chrome.storage.local.get('region',function(result){ region = result.region || {}; creaList(region); }); $(function(){ $('.set-add').click(function(){ let _originVal = $.trim( $('.input-origin').val() );
let _origin_agre = $('.input-origin').next().get(0).checked;
let _replaceVal = $.trim( $('.input-replace').val() );
let _replace_agre = $('.input-replace').next().get(0).checked;
let _aliasVal = $.trim( $('.input-alias').val() ); if( countNum(region) > Max_Size ){
return boom('最多添加10个!');
} if( region[_aliasVal] != undefined ){
return boom('已添加!');
} if( _originVal=="" || _replaceVal=="" || _aliasVal=="" ){
return boom('不能为空!');
} let jsons = {}; region[_aliasVal] = jsons[_aliasVal] = {
"origin" :_originVal,
"origin_agre" : _origin_agre,
"replace": _replaceVal,
"replace_agre" : _replace_agre,
"alias":_aliasVal
} chrome.storage.local.set({'region':region}, function() {
creaList(jsons);
boom('添加完成!');
$('.input-origin').val('');
$('.input-replace').val('');
$('.input-alias').val('')
}); }); $('.set-switch').click(function(){ chrome.tabs.query({active: true, currentWindow: true}, function(tabs){ let href = tabs[0].url;
let url = '';
let agreement = '';
for( let val in region ){ let o = region[val].origin;
let r = region[val].replace;
let origin_agre = region[val].origin_agre;
let replace_agre = region[val].replace_agre; let origin_reg = new RegExp(o);
let replace_reg = new RegExp(r); if ( origin_reg.test(href) ) { if( origin_agre && replace_agre || !origin_agre && !replace_agre){
url = href.replace(o, r);
}else if( origin_agre && !replace_agre ){
agreement = href.replace("http",'https');
url = agreement.replace(o, r);
}else if( !origin_agre && replace_agre ){
agreement = href.replace("https",'http');
url = agreement.replace(o, r);
} chrome.tabs.update(tabs[0].id, {
url: url
}, function(tab){
}); }else if( replace_reg.test(href) ){ if( origin_agre && replace_agre || !origin_agre && !replace_agre){
url = href.replace(r, o);
}else if( origin_agre && !replace_agre ){
agreement = href.replace("https",'http');
url = agreement.replace(r,o);
}else if( !origin_agre && replace_agre ){
agreement = href.replace("http",'https');
url = agreement.replace(r,o);
} chrome.tabs.update(tabs[0].id, {
url: url
}, function(tab){
});
} } }); }); $('.slide-btn').click(function(){
if( $('.set-list li').length<= 0 ){
return boom('列表为空!');
}
if( $('.slide-btn').is('.cur') ){
$('.slide-btn').removeClass('cur');
$('.set-slide').animate({'left':0},'fast',function(){
$('.slide-btn').html('[切换已添加页]');
});
}else{
$('.slide-btn').addClass('cur');
$('.set-slide').animate({'left':-150},'fast',function(){
$('.slide-btn').html('[切换添加页]');
});
} }); $('.set-list').delegate('.set-close','click',function(){ let $this = $(this);
let _aliasVal = $this.prev().text();
let $parent = $this.parent('li');
$parent.remove();
if( $('.set-list li').length <= 0 ){
boom('列表为空!');
$('.slide-btn').removeClass('cur');
$('.set-slide').animate({'left':0},'fast',function(){
$('.slide-btn').html('[切换已添加页]');
});
}
if( region[_aliasVal] != undefined ){
delete region[_aliasVal];
}
chrome.storage.local.set({'region':region}, function() { }); }); }); function creaList(json){
let $ul = $('.set-list ul');
for (name in json){
let html=`
<li>
<div class="set-info">${name}</div>
<span class="set-close">X</span>
</li>
`;
$ul.append(html)
} } function countNum( json ){
let count = 0;
for(let a in json){
if(json[a]){
count++;
}
}
return count;
} function boom(txt){
let html = `
<div class="set-boom">
<div class="set-mark"></div>
<div class="set-alert">
<span class="set-alertxt">${txt}</span>
</div>
</div>
`;
let timer = null;
$('body').append(html);
$('.set-boom').fadeIn('fast',function(){
timer = setTimeout(function(){
$('.set-boom').fadeOut('fast',function(){
$('.set-boom').remove();
});
},450);
}); }
static/js/menus.js(创建右键快捷键):
//添加右键菜单;
chrome.contextMenus.create({
"title": "域名助手",
"contexts":["all"],
"onclick":function(info,tab){ let region = {}; chrome.storage.local.get('region',function(result){ region = result.region || {}; chrome.tabs.query({active: true, currentWindow: true}, function(tabs){ let href = tabs[0].url;
let url = '';
let agreement = '';
for( let val in region ){ let o = region[val].origin;
let r = region[val].replace;
let origin_agre = region[val].origin_agre;
let replace_agre = region[val].replace_agre; let origin_reg = new RegExp(o);
let replace_reg = new RegExp(r); if ( origin_reg.test(href) ) { if( origin_agre && replace_agre || !origin_agre && !replace_agre){
url = href.replace(o, r);
}else if( origin_agre && !replace_agre ){
agreement = href.replace("http",'https');
url = agreement.replace(o, r);
}else if( !origin_agre && replace_agre ){
agreement = href.replace("https",'http');
url = agreement.replace(o, r);
} chrome.tabs.update(tabs[0].id, {
url: url
}, function(tab){
}); }else if( replace_reg.test(href) ){ if( origin_agre && replace_agre || !origin_agre && !replace_agre){
url = href.replace(r, o);
}else if( origin_agre && !replace_agre ){
agreement = href.replace("https",'http');
url = agreement.replace(r,o);
}else if( !origin_agre && replace_agre ){
agreement = href.replace("http",'https');
url = agreement.replace(r,o);
} chrome.tabs.update(tabs[0].id, {
url: url
}, function(tab){
});
}
}
});
}); }
});
后记:
因为要调用chrome浏览器本身的接口,我得改一下打包一下安装到chrome中,很繁琐。
参考资料:
《Chrome API》(需要翻墙)
《360极速浏览器应用开放平台》(其实就是chrome扩展的翻译)
chrome扩展程序----域名助手的更多相关文章
- 【前端工具】Chrome 扩展程序的开发与发布 -- 手把手教你开发扩展程序
关于 chrome 扩展的文章,很久之前也写过一篇.清除页面广告?身为前端,自己做一款简易的chrome扩展吧. 本篇文章重在分享一些制作扩展的过程中比较重要的知识及难点. 什么是 chrome 扩展 ...
- ----转载----【前端工具】Chrome 扩展程序的开发与发布 -- 手把手教你开发扩展程序
关于 chrome 扩展的文章,很久之前也写过一篇.清除页面广告?身为前端,自己做一款简易的chrome扩展吧. 本篇文章重在分享一些制作扩展的过程中比较重要的知识及难点. 什么是 chrome 扩展 ...
- chrome扩展程序开发
首先,明确两个概念的区别:chrome扩展程序和Web Apps.具体参考:http://www.chromi.org/archives/10106 本文只讨论chrome扩展程序. 最好的开发教程莫 ...
- 编写Chrome扩展程序
Chrome的扩展程序很多,也很容易入门,可以来简单实现一下 看看,慢慢就能实现出一个扩展程序来 每个扩展程序应用一般会包含: 一个manifest清单文件 html文件 js文件 其他文件等 可以看 ...
- Web 开发人员必备的12款 Chrome 扩展程序
之前已经分享过一些帮助 Web 开发人员和设计师的 Chrome 扩展,这次我们继续展示一组很有用的 Chrome 应用程序.这些免费的 Chrome 应用程序可以简化您的工作流程,为了加快您的工作流 ...
- Google Chrome 扩展程序开发
根据公司的规定,每月八小时,弹性工作制.所以大家平时来的不太准时,如果有事,下班也就早些回去了.所以一个月下来工作时间可能不够,但是公司的考勤日历是这样的: 除了请假和法定节假日外,其他样式显示都是一 ...
- 解决高版本 Google Chrome 扩展程序强制停用问题 -摘自网络
1]前往这里下载你喜欢的语言的组策略模板 后缀为.adm (其他的文件自己看 https://docs.google.com/viewer?a=v&pid=sites&srcid=Y2 ...
- 【转】编写Chrome扩展程序
Chrome的扩展程序很多,也很容易入门,可以来简单实现一下 看看,慢慢就能实现出一个扩展程序来 每个扩展程序应用一般会包含: 一个manifest清单文件 html文件 js文件 其他文件等 可以看 ...
- Chrome扩展程序——TabCopy:一键复制网页标题和网址
Chrome扩展程序——TabCopy:一键复制网页标题和网址 - Erik_ly的博客 - CSDN博客 https://blog.csdn.net/u012318074/article/detai ...
随机推荐
- 01——Solr学习之全文检索服务系统的基础认识
一.为什么要用Solr,Solr是个什么东西? 1.1.Solr是个开源的搜索服务器 1.2.我们用Solr主要实现搜索功能,一般的网站首页都会有一个大大的搜索框,用来搜索此网站上的商品啊什么的,如下 ...
- Sass和less的区别是什么?用哪个好
什么是Sass和Less? Sass和Less都属于CSS预处理器,那什么是 CSS 预处理器呢? CSS 预处理器定义了一种新的语言,其基本思想是,用一种专门的编程语言,为 ...
- python之单例模式、栈、队列和有序字典
一.单例模式 import time import threading class Singleton(object): lock = threading.RLock() # 定义一把锁 __inst ...
- python学习日记(初识递归与算法)
递归函数 定义 递归的定义——在一个函数里再调用这个函数本身 递归的最大深度——997,即栈溢出. 使用递归函数需要注意防止栈溢出.在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进 ...
- Linux系统中硬链接和软链接(符号链接)的区别
首先是创建链接的命令 ln file link //创建硬链接 ln -s item link //创建软链接 区别 硬链接 硬链接是一开始Unix创造链接的方式,而软连接就更现代一点.创建硬链接的时 ...
- Docke--利用 commit 理解构建镜像
Docker 利用commit理解构建镜像 镜像是容器的基础,每次执行 docker run 的时候都会指定哪个镜像作为容器运行的基础.当我们使用Docker Hub的镜像无法满足我们的需求时,我们就 ...
- <知识整理>2019清北学堂提高储备D1
一.枚举: 枚举是最简单最基础的算法,核心思想是将可能的结果都列举出来并判断是否是解. 优点:思维简单,帮助理解问题.找规律.没头绪时 缺点:时空复杂度较高,会有很多冗余的非解(简单的枚举几乎没有利用 ...
- BZOJ2839 集合计数 容斥
题目描述(权限题qwq) 一个有N个元素的集合有2^N个不同子集(包含空集),现在要在这2^N个集合中取出若干集合(至少一个),使得 它们的交集的元素个数为K,求取法的方案数,答案模100000000 ...
- 逆FizzBuzz问题求最短序列
问题描述 FizzBuzz问题:一个大于0的自然数能整除3,将输出“Fizz”:能整除5,将输出“Buzz”:能整除3和5,将输出“FizzBuzz”:否则输出自己. 逆FizzBuzz问题最短序列: ...
- Windows环境下Anaconda安装TensorFlow的避坑指南
最近群里聊天时经常会提到DL的东西,也有群友在学习mxnet,但听说坑比较多.为了赶上潮流顺便避坑,我果断选择了TensorFlow,然而谁知一上来就掉坑里了…… 我根据网上的安装教程,默认安装了最新 ...