记浏览器帐号登录插件开发遇到的问题

背景

由于负责公司帐号相关工作,经常和各个业务有着千丝万缕的关系。最近,一个业务向我了解了一下帐号登录相关的问题,突然脑子里萌发了一个想法:为什么我作为负责帐号的前端,不自己实现一个方便业务的插件呢?于是乎,开始准备开发一个内部使用的chrome浏览器插件,这个插件的功能是:帮助开发者或者测试快速切换帐号进行登录,只关注功能相关的事情,并且展示了帐号相关信息设置或者修改的入口,加快开发和测试的效率。

开始准备

由于这个想法就是个人的想法,并结合了业务之前反馈的有的问题。就自己把主要功能点和应该怎么呈现稍微的想了一下。当这个内部产品的雏形出现之后,就开始技术准备啦。首先这个是chrome浏览器的插件,很显然要查看插件开发的相关文档,这里找到了chrome官方文档还有官方文档的译文。很显然,我的能力来说译文更容易入手。简单的看了一下入门和一些主要功能有了大致的了解。看了不少文档,个人感觉(https://crxdoc-zh.appspot.com/extensions/index) 翻译和制作的比较清晰,看着很舒服。如果你也开发chrome插件的话,建议可以参考这个文档,在这里对作者表示感谢!如果看不到的话,也可以来这里(https://lmk123.duapp.com/extensions/devguide),一个不需要FQ的地址。

动手过程

看了入门文档(https://lmk123.duapp.com/extensions/getstarted)的例子,很轻松的就成功的制作了例子上的插件,瞬间自信心爆棚,感觉写插件挺简单的呀。当自己动手写我的插件的时候却发现,太痛苦啦。各种报错,各种不能运行。下面介绍一下,在这个过程中存在的比较突出的问题,可能对大家特别是新手有借鉴意义。

  • manifest.json中content_scripts的配置

这里可以配置需要注入页面上的js或者是css文件,并且还有其他配置选项,这些配置说明可以参考文档,我这里就不多作说明了。需要注意的是:

    • 引入的js必须是本地文件,不能是线上的资源;
    • 控制注入的js的权限在那些域名下有效;
    • 开发过程中,要确保要注入页面的js确实已经注入成功,再进行调试;
    • content_scrpit配置的js和chrome。tabs.excuteScript(tabId, {file: ‘xxx.js‘}, callback)属于相同的功能
    • 页面的js和插件的js执行环境是独立的,不能使用对方的变量或方法
  • 插件里请求的跨域问题

插件索要发送的请求,不能使用第三方库(如:jquery)的请求方法,因为这样发送的请求,会跨域。解决方案:使用 XMLHttpRequest解决,这里需要注意的是,受到安全的限制,无法通过setRequestHeader设置Reffer。可以自己封装一个方法,以后就可以很方便的使用了。在这里还要注意的是,所要发送的请求地址,必须在manifest.json中的permissions就行配置,不然也会出现错误的。

  • 插件和页面之间的通信

页面之间通信的方式很多,接口也都不一样,当然适用场景也有却别。比较痛苦的时,这些接口在chrome的不同版本才能使用,所以是使用的时候需要注意一下。这里(https://lmk123.duapp.com/extensions/devguide)对各个接口说明的比较详细。我使用的通信方法是:

chrome.tabs.sendRequest(tabId, {}, function(response){});

chrome.extension.onRequest.addListener(function(message, sender, sendResponse){});

通过上面的方式就行消息的传输,其他的方式可以参考文档进行使用。

遗留问题

遇到了一个很奇怪的现象,有的页面无法注入js,一直没有出来原因,也希望有了解的可以分享一下,不胜感激,

插件功能展示

已登录帐号信息展示、相关功能修改入口

登录帐号

展现测试帐号列表,然后一键登录,其中帐号列表是服务端维护,可以保证更新帐号列表信息。

由于是第一次开发,分享的也是自己的一些感受,难免会有问题,也感谢各位能不吝赐教。

参考资料:

https://lmk123.duapp.com/extensions/devguide

http://open.se.360.cn/open/extension_dev/getstarted.html

https://developer.chrome.com/extensions

时间: 2024-10-27 08:23:16

记浏览器帐号登录插件开发遇到的问题的相关文章

Ansible-Tower快速入门-4.以超级用户帐号登录【翻译】

以超级用户帐号登录 首先,登录tower需要使用tower服务器所在的URL,格式如下:https://<tower server name>/ 注意:tower安装了一个自签名证书用于HTTPS通信,你可能需要你的浏览器接受这个证书,如果你想要替换证书,可以查看“安装和设置”章节. 登录使用你安装tower过程中所设置的用户名和密码,默认情况下,用户名为”admin”,密码为”password”,你可以通过点击在用户标签上的admin帐户进行修改. 注意:关于普通用户,超级用户和组织管理员的

在Ubuntu中用root帐号登录

一.其实我个人认为这没有多大必要,因为当你需要 root 的权限时,使用 sudo 便可以了.如果你实在需要在 Ubuntu 中启用 root 帐号的话,那么不妨执行下面的操作: 1.重新设置 root 的密码: $sudo passwd root  #按照提示输入两次新的密码,并加以确认. 2.启用root用户登录: $sudo vi /etc/gdm/gdm.conf #打开gnome的配置文件,在末行模式中输入:AllowRoot回车,找到AllowRoot=false ,把false改为

Ubuntu 14.04/16.04使用pbis集成AD域帐号登录

Ubuntu 14.04/16.04使用pbis集成AD域帐号登录: 注:pbis为开源软件,前身为likewise-open 下载pbis deb包略 dpkg -i pbis-open/* /opt/pbis/bin/config UserDomainPrefix ming (设置默认域名前缀,不设置用户名前需加domain\) /opt/pbis/bin/config AssumeDefaultDomain true /opt/pbis/bin/config LoginShellTempl

Java 可以用已知帐号登录,且可以注册后登录的小程序

|--需求说明 1.写一个注册和登录功能,使用已知的帐号和密码可以直接登录,如果没有帐号,注册后可以用刚注册的帐号登录 2.注册的时候,如果帐号已经存在,不能注册 3.注册的时候,设置两次密码,如果两次密码设置得不同,不能注册 4.登录的时候,密码输错三次,锁定帐号 5.登录的时候,如果没有这个帐号,则提醒用户注册,注册后可以登录 6.登录的时候,帐号密码都正确要输入验证码,系统给出的验证码和用户输入一致时,允许登录(忽略大小写) 7.登录之后,用户可以看到用户的预留信息 |--实现方式 1.采

phpunit-selenium自动化测试开源中国帐号登录和发博文

PHPUnit 的 PHAR 包中已经包含了PHPUnit_Selenium组件包 phpunit官网:https://phpunit.de/,下载地址:https://phar.phpunit.de/phpunit.phar Windows下安装 整体上说,在 Windows 下安装 PHAR 和手工在 Windows 下安装 Composer 是一样的过程: 为 PHP 的二进制可执行文件建立一个目录,例如 C:\bin 将 ;C:\bin 附加到 PATH 环境变量中(相关帮助) 下载 h

装饰器的运用,编写一个简单的仿京东登录软件模拟支持微信和京东帐号登录

#__author__:"Jay guo" #__date__:2016/9/8 login_flag = False def login(flag): def func(f): def inner(): global login_flag if login_flag == False: nameuser = input("input your name:> ") print (nameuser) passwd = input ("input you

【缓存】利用Cache防止同一帐号重复登录

需求概要 对于B/S应用系统中客户经常会提出同一帐号不能重复登录的需求,就是说,用某一帐号登录系统后,在系统不超时的情况下,任何人都不能再用目前已登录的帐号登录系统.包括我目前的项目中同样有这一需求. 其实要实现这个功能也不难,方法也有多种,比如用数据库来记录用户登录情况.用Application来保存用户登录信息.用Cache来保存信息等等.现在我们就来讨论一下如何利用缓存Cache方便地实现此功能. 解决方法 我们都知道Cache与Session这二个状态对像的其中有一个不同之处,Cache

即时通信系统中如何实现:支持PC端和移动端同时在线(即支持同帐号多设备同时登录)?

如果我们开发的即时通信系统(IM系统)要支持同帐号多设备同时登录的场景(或称"多地登录"),即需要像QQ一样,在PC端登录的同时,也可以使用同一个帐号登录移动端(iOS或Android),那么,如何才能做到了? 在ESFramework/ESPlatform体系中,是使用 UserID 作为唯一标志来标记每一个用户的,也就是说,对于一个指定的UserID,只能有一个客户端在线.所以,ESFramework 虽然支持多种类型的客户端设备,但是,ESFramework并不支持不同类型的客户

Oracle11g 默认用户帐号和密码 解锁用户 plsql登录

近日在尝试在本地电脑安装Oracle,把遇到的问题以及解决过程中使用的资料分享给一下. 数据库为Oracle 11g -------------------------------------------------------------------------------------------------------------------------------------------------- 用户名 密码 sys/change_on_install           SYSDB