注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

网易杭州 QA Team

务实 专注 分享 做有态度的QA

 
 
 
 
 

日志

 
 

学车轮,改利器——账号切换扩展  

来自nowind   2015-07-12 00:46:18|  分类: 默认分类 |举报 |字号 订阅

  下载LOFTER 我的照片书  |
在做手工验证测试时,少不了各种账号马甲不停切换,其实测试环境就我一个人,不信我换个马甲再上来..
扯远了。。言归正传,作为高大上的现代浏览器,可扩展性是必不可少的。FF和chrome的扩展都已经不少。
自然这种换马甲的扩展也不会少。
先来说常见的2种实现:
1.FF的cookiesSwap实现
下载链接 https://addons.mozilla.org/zh-CN/firefox/addon/cookieswap/
这 个扩展保存当前所有域的cookies放在一个账号里,每次切账号就会回写原来的账号中所有cookie,然后切换成新的cookies到浏览器。这个其 实不是很好,我们测试只是某些域,你这样把所有域的cookies都替换,我这样很蛋疼的呀。我上班偷偷登个淘宝,cookie一换又要重新登陆了。。
2.Chrome的cookieSwitch实现
这 货才是我今天要DIY的对象,它的实现也很简单,来个双层map,以domian为第一个key,再以配置名为第二层key,该域下的该配置的 cookies为value。每次加载时,仅重写该域的cookie。也不会回写现在的cookie到map里,相当于一个瞬间状态,每次回到之前保存的 状态。
但是,这货还有几点会让你很不爽:
1)子域不能加载父域的cookie,很多时候项目大大的,总有子域什么的,登陆用的cookie是通用的。这时候肯定是个问题啦
2)cookie会过期。插件的替换很蛋疼的啦。你把那个配置名重新输一遍。点个new。。这,输个名字也是很耗时的啦。。
动起手,改起来。。勤劳的QA有饭吃。
unzip它先,看下manifest.js。无力吐槽,不愧是历史悠久的扩展,api还是老一套的。
看下新api的文档,google的应该的访问困难,给360的。http://open.se.360.cn/open/extension_dev/overview.html
1."manifest_version" 这个一定要是2,表示是新api
2.原有的background html页面只包含一个script标签,这个在新api中就不提倡这样做了,而是单独有一个background js,对应在manifest.js应改成"background":{"scripts": ["background.js"]}
3.扩展在omnibox有图标的话,他的定义方式需修改成以下:
"page_action": {
      "default_icon": "icon19.png",
      "default_popup": "cookie-switcher.html"
   }
ok,别的没太大问题,把文件夹拖到chrome的扩展里现在应该能运行了。
下面需要把我们的功能加进去,先分析下扩展的代码:
cookie-switcher.html 就是点击omnibox图标弹出的页面
cookie-manager.js 是cookie控制代码的实现
background.js 原background.html改造而来,就是在omnibox加个图标
manager-ui.js 是控制层,实现按钮点击逻辑
ok,下面分析下我们的需求,加update和递归子域获取的功能。
1.update功能就是删除+新建的组合。嗯,就是这么不想写新功能。。在manager-ui.js中修改
2.递归子域就是不断取.后面的域,直到可以取到cookie为止。在cookie-manager.js修改
对于1,有如下代码:

// Link to update the profile's cookies
var updateLink = $('<a />').text('Update').click(function() {
cookieManager.deleteProfile(name);
chrome.cookies.getAll({url: tab.url}, function(cookies) {
console.log(cookies);
cookieManager.saveProfile(name, cookies);
injectProfile(name, cookies);
});
var message = 'Successfully updated profile "' + name + '"';
showStatusMessage(message);
});
updateLink = updateLink.attr('href', 'javascript:void(0)');
actions = actions.append(updateLink.addClass('button'));

对于2,有如下代码:

getProfiles: function() {
var domain=this.domain;
var pros=null;
for (var i=0;pros==null&&domain!=''&&i<10; domain=domain.substring(domain.indexOf('.')+1),i++)
{
pros=localStorage.getItem(domain);
}
return JSON.parse( pros||'{}' );
},

整体来说,代码不多,也很清晰。修改后的扩展能在一定程度上增加便利性。
扩展下载如下:
http://u.163.com/efAfky11  提取码: X9R8Boqn
  评论这张
 
阅读(343)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016