QQ群查看器--chrome浏览器扩展

源码及程序下载地址:http://pan.baidu.com/share/link?shareid=3636190804&uk=1678089569

关于如何创建一个最基本的 chrome扩展,就不细说了。可以参考:

360极速浏览器扩展开发文档:http://open.chrome.360.cn/extension_dev/overview.html

Chome浏览器扩展开发官方文档:https://developer.chrome.com/extensions/getstarted.html

下面说一下关键代码:

//popup.js

window.onload =  function() {
         chrome.windows.getCurrent( function(currentWindow) {
                   chrome.tabs.query({active:  true, windowId: currentWindow.id},
                             function(activeTabs){
                                     chrome.tabs.executeScript(activeTabs[0].id, {file: "./get_group_list.js", allFrames:  false});
                            });      
         });
}

这段代码在扩展页面加载将会执行。作用是获取当前窗口下的活动标签页面,注入javascript代码,执行。

chrome.windows.getCurrent() 获取当前活动浏览器窗口,一个浏览器窗口包含多个标签页,详细参数及用法参考: https://developer.chrome.com/extensions/windows.html#method-getCurrent

chrome.tabs.query() 根据参数查询标签页。详细参数及用法参考:
https://developer.chrome.com/extensions/tabs.html#method-query

由于获取QQ群列表需要在QQ页面执行 Javascript 代码,所以就需要向QQ页面注入Javascript代码并执行。Chome提供了一个chrome.tabs.executescript() 方法动态地向页面注入JavaScript脚本并执行。详细参数及用法参考:
https://developer.chrome.com/extensions/tabs.html#method-executeScript

用于在QQ页面执行码在get_group_list.js中,在此之前,我们还需要知道,如何获取用户所加的QQ群。当然,QQ用户需要先加入几个群,总得有群才能获取吧。呵呵。随便打开一个QQ群空间。在页面顶端就可以查看到用户所加的群。用Fiddler http调试工具抓取http包。分析得到

http://qun.qzone.qq.com/cgi-bin/get_group_list?callbackFun=_GetGroup&uin=453867443&random=0.18549695408314274&g_tk=1705493508

服务器返回json格式的数据,包含了用户所加的群信息。上面的地址中g_tk是一个关键的参数,没有这个参数获取不到数据。计算这个参数的代码在QQ群空间的页面中。

计算g_tk时需要一个Cookie (skey),下面的的代码是获取一个Cookie

function get_cookie(name){
     var r =  new RegExp("(?:^|;+|\\s+)"+name+"=([^;]*)");
     var m=document.cookie.match(r);
     return(!m?"":m[1]);
}

计算 g_tk

function get_gtk(){
     var hash=5381;
    str = get_cookie("skey");
    
     for( var i=0, len=str.length; i < len; ++i){
        hash+=(hash<<5)+str.charCodeAt(i);
    }
     return hash&0x7fffffff;
}

这两段代码都可以在QQ群空间页面中查到,我把它提取了出来,稍作了修改。

有了这些就可以通过 ajax向腾讯服务查询QQ群了

// get_group_list.js
// 定义一个回调函数
function _GetGroup_Callback(obj) {
     // 向扩展送一个请求。
    chrome.extension.sendRequest(obj);
}
var get_group_list_url = "http://qun.qzone.qq.com/cgi-bin/get_group_list?callbackFun=_GetGroup&uin=" + get_login_uin() +"&random=0.18549695408314274&g_tk=" + get_gtk();
xhr =  new XMLHttpRequest();
xhr.open("GET", get_group_list_url);
xhr.onreadystatechange =  function() {
     if(xhr.readyState == 4) {
        eval(xhr.responseText);
    }
}  
  xhr.send();

由于返回的数据有一个回调函数,所以需要定义一个回调用,并用 eval 进行调用。

获取到了数据之后,就要把数据传回给扩展了,chrome提供了一个chrome.extension.sendRequest() 方法,可以向扩展发送消息。详细参数及用法参考:

在扩展中需要定义一个监听器,以便监听页面发来的消息。

// popup.js
chrome.extension.onRequest.addListener( function(obj){
     // 显示群列表
    show_group_list(obj);
});

显示获取到的数据就很简单了,会点html,css,javascript都会做的。不再说了。程序有个缺陷,只能在打开的QQ空间,QQ群空间,WebQQ页面下才能获取到数据,具体是因为需要用的这些页面的Cookie。

运行截图:

<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>

chrome浏览器扩展相关推荐

  1. Chrome浏览器扩展开发系列之五:Page Action类型的Chrome浏览器扩展

    Page Action类型的Google Chrome浏览器扩展程序,通常也会有一个图标,但这个图标位于Chrome浏览器的地址栏内右端.而且这个图标并非始终出现,而是当某指定的页面打开时才会出现.也 ...

  2. Chrome 浏览器扩展 - Dark Web - Dark Theme for Chrome

    Jerry 之前的文章 Chrome 浏览器扩展 - Night Eye ,介绍的 Night Eye 这款 Chrome 浏览器扩展,只有三个月的试用期.因此我又在网上找到了另一款完全免费的 Chr ...

  3. Chrome 浏览器扩展 - Night Eye

    我以前一直使用一款叫做 Care your Eyes 的 Chrome 浏览器扩展,能将任何网站背景设置成黑色. 最近我的 Chrome 升级到下列这个版本后,发现这个扩展无法工作了: Version ...

  4. Chrome浏览器扩展程序的本地备份

    由于众所周知的原因,有些朋友可能很难在线下载Chrome扩展程序.一种选择是可以让朋友把他成功安装的Chrome扩展程序导出成本地文件,然后让朋友发送给自己,在自己本地电脑上报这些本地文件直接拖到Ch ...

  5. Chrome浏览器扩展学习之 - 添加书签

    今天做了个简单的Chrome浏览器扩展: 添加书签! 就是仿照官方文档中的例子, 在书签管理器中添加一个文件夹, 但是, 但是, 但是... 都怪偶, 要搞什么规范命名, 起了个方法名叫 addbk( ...

  6. 编写一个 Chrome 浏览器扩展程序

    浏览器扩展允许我们编写程序来实现对浏览器元素(书签.导航等)以及对网页元素的交互, 甚至从 web 服务器获取数据,以 Chrome 浏览器扩展为例,扩展文件包括: 一个manifest文件(主文件, ...

  7. Chrome浏览器扩展开发之自动化操作页面

    Chrome浏览器支持扩展(Extension)开发,来定制扩展现有的功能,如:自动登录,定时刷新,抢票等功能,本文以一个简单的小例子,简述Google Chrome 扩展开发的基本步骤,仅供学习分享 ...

  8. Chrome浏览器扩展的写法

    Chrome浏览器扩展写法 1.写在前面 2.前言 2.1. 什么是Chrome插件 2.2. 学习Chrome插件开发有什么意义 2.3. 为什么是Chrome插件而不是Firefox插件 3.开发 ...

  9. Chrome浏览器扩展插件指南:从MV2迁移到Manifest V3

    Chrome Web Store于2021年1月已经开始接受Manifest V3扩展的提交.如果你还在使用MV2版本,那么一定要在官方弃用之前,尽快更新到MV3版本. Chrome浏览器从88版本开 ...

最新文章

  1. 我在中关村给不了你国贸的爱
  2. Microsoft Dynamics CRM 2013升级2015(二)正式安装升级 2015及 Reporting Extensions安装
  3. 【Android RTMP】RTMP 数据格式 ( FLV 视频格式分析 | 文件头 Header 分析 | 标签 Tag 分析 | 视频标签 Tag 数据分析 )
  4. centos内核参数优化
  5. CSS 文字垂直居中自适应 - 代码篇
  6. 【RMQ问题】求数组区间最大值,NYOJ-1185-最大最小值
  7. 学习linux/unix编程方法的建议-转
  8. Oracle flashback之传统恢复vs.重现数据库
  9. Android设计模式(1)----单例模式
  10. mysql 语句 简书_MySQL基本语句
  11. python gdbm_linux下python安装
  12. android截屏方法是黑屏,Android截屏表面视图显示黑屏
  13. 软考每日一练||网络工程师
  14. 图像坐标球面投影_C/C++ 图像处理(7)------图像の球面投影算法
  15. 计算机域 用户怎么设置,电脑怎么加域设置
  16. 如何突破思维局限去思考世界,去读读以下三个理论
  17. javascript history对象详解
  18. 学会计学java_我只是一个初中毕业的,现在很想学会计,我不知道从何学起?...
  19. 遍历文件夹打印所有文件名
  20. [BZOJ1123][POI2008]BLO(tarjan求点双+树形dp)

热门文章

  1. CPU速度慢了,怎么办?
  2. css特效开发,7款吸引人眼球的jQuery/CSS3特效实例分享
  3. 论文计算机的教学方法,对于计算机教学方法的探讨论文原稿
  4. there is no getter for property named 错误
  5. android系统读写速度,Android 通过adb测试机器读写速度(rk)
  6. 中小型企业如何实现数字化转型?看完这5点你就明白了
  7. H3C构建一个中小型企业局域网
  8. java-php-python-ssm校园闲置物品交易系统计算机毕业设计
  9. 第5章 uin-app本地主机数据跨域(Cors)数据交互实现
  10. 面试官再问你优先级队列,请把这篇文章丢给他