zoukankan      html  css  js  c++  java
  • 如何实现在浏览器中打开IM聊天窗口? 转载

    1. 浏览器中如何判断旺旺是否已经安装?

    下面一步步来探索,过程如下:

    (1) 打开淘宝任意店铺页面,查看源码,在亮灯旺旺图标处有如下代码:

    <a href="http://amos.alicdn.com/getcid.aw?v=3&uid=%B5%D1%C9%AF%C6%EC%BD%A2%B5%EA&site=cntaobao&groupid=416517&s=1&charset=gbk" target="_blank">
    <span style="white-space: pre;">    </span><img border="0" alt="给我发消息" src="http://amos.alicdn.com/grponline.aw?v=3&uid=%B5%D1%C9%AF%C6%EC%BD%A2%B5%EA&site=cntaobao&gids=416517&s=1">
    </a>

    img是旺旺图标,重点是href的内容。查看href链接的源码,如下:

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head><title></title> </head> 
    <body> 
    <script src="http://www.im.alisoft.com/webim/js/website.js" > </script> 
    <script language="javascript">
        function windowClose(){    
            window.opener = null;    
            window.open('','_top');    
            window.top.close();
        }
        sendClientMsg('', '', 'cntaobao', '笛莎旗舰店:25', 1, '');
        setTimeout('windowClose()', 1);
    </script>
    </body> </html>

    从源码可知这段代码做了这几件事:首先调用sendClientMsg函数,等待1秒钟,打开一个空白窗口,然后关闭之。核心是sendClientMsg函数。它位于website.js中。查看website.js的源码。改源码被混淆压缩了,为了便于查看,找个在线js格式化工具将代码重新格式化一下。这里使用了“站长工具”提供的在线js格式化工具http://tool.chinaz.com/Tools/JsFormat.aspx

    有这样一段函数,它首先创建一个aliimx的activeX对象,如果创建成功则说明旺旺被安装了,否则根据站点来源(淘宝中国站、阿里中国站、雅虎中国站)分别判断是否安装了其它几个版本的旺旺。源码如下:

     1 function isInstalledClient(C) {
     2     try {
     3         var B = new ActiveXObject("aliimx.wangwangx");
     4         if (B != null) {
     5             return 1
     6         }
     7     } catch(D) {}
     8     var A = getSite(C);
     9     if (A == "cntaobao") {
    10         if (newCheckWangWangInstalled() != DEFAULT_VERSION) {
    11             return 1
    12         }
    13     } else {
    14         if (A == "cnalichn") {
    15             if (newCheckAlitalkInstalled() != DEFAULT_VERSION) {
    16                 return 1
    17             }
    18         } else {
    19             if (A == "chnyahoo") {
    20                 if (newCheckYahooInstalled() != DEFAULT_VERSION) {
    21                     return 1
    22                 }
    23             } else {
    24                 return 0
    25             }
    26         }
    27     }
    28     return 0
    29 }
     1 function newCheckAlitalkInstalled() {
     2     var A = DEFAULT_VERSION;
     3     try {
     4         var C = new ActiveXObject("AlitalkSetup.Install");
     5         if (C != null) {
     6             A = "cnalichn"
     7         }
     8     } catch(B) {}
     9     return A
    10 }
    11 function newCheckWangWangInstalled() {
    12     var A = DEFAULT_VERSION;
    13     try {
    14         var C = new ActiveXObject("WangWangX.WangWangObj");
    15         if (C != null && "1.6.06.0525" != C.GetVersionStr()) {
    16             A = "cntaobao"
    17         }
    18     } catch(B) {} finally {
    19         C = null
    20     }
    21     return A
    22 }
    23 function newCheckYahooInstalled() {
    24     var A = DEFAULT_VERSION;
    25     try {
    26         var C = new ActiveXObject("YahooWangWangX.WangWangObj");
    27         if (C != null) {
    28             A = "chnyahoo"
    29         }
    30     } catch(B) {}
    31     return A
    32 }

    为何通过

            var B = new ActiveXObject("aliimx.wangwangx");
            if (B != null) {
                return 1
            }

    这段代码能判断出Windows是否安装了旺旺呢?旺旺安装到Windows中之后会在注册表中写入若干条注册表项,在浏览器中通过ActiveX控件来读取注册表,如果能够找到相应的注册表项,则说明当前Windows中安装了旺旺,否则表明没有安装。调用

    new ActiveXObject("aliimx.wangwangx");

    的时候浏览器会去读取注册表,在HKEY_CLASSES_ROOT下搜索aliimx.wangwangx表项,找到了则说明系统安装了阿里旺旺。

    由此我们也可以知道,如果系统中的旺旺是未经“美化”的绿色版,浏览器不一定能够判断出它的存在。

     

    2. 如何在浏览器中把旺旺聊天窗口打开?

    在1中我们已经判断出系统中安装了阿里旺旺,那么下一步就是打开旺旺聊天窗口。怎么做呢?一切还是通过website.js中得脚本实现的,从sendClientMsg函数往下找,可以看到如下一段代码:

     command = "aliim:sendmsg?uid=" + D + G + "&touid=" + C + B + "&siteid=" + C + "&status=" + E + getMoreProperties(F);
    execAliimShell(command)
    function execAliimShell(A) {
        location = A
    }

    这里好像什么都没有做,只不过是将一个地址赋值给浏览器的location属性而已。一般来说,如果将一个url赋值给location,那么浏览器将跳转到这个url处。但是此处不是一个url,而是一个aliim:sendmsg这样的“命令”,该如何处理呢?不妨点击一下,可以看到浏览器给出如下提示:

    这说明浏览器在处理这种目标路径的时候会采取比较特殊的动作。在Windows中这叫做“shell命令”。shell命令能够让浏览器打开外部的应用。那么,浏览器是如何根据aliim:sendmsg这个命令找到对应的外部应用的呢?奥妙还是在注册表中,在注册表中搜索aliim关键字,可以看到如下内容:

    aliim项下记录了它对应的应用的路径。这里应用的名称是wwcmd,它应该是一个命令解析器,%1是它的参数,也就是地址中冒号(:)之后的内容,wwcmd将根据解析好的命令打开阿里旺旺对应的聊天窗口。

    原文地址:http://blog.csdn.net/maray/article/details/6950521

  • 相关阅读:
    ssh批量远程执行脚本screen后台运行
    使用screen共享shell会话(终端共享)
    php获取一个月前的时间戳,获取三个月前的时间戳,获取一年前的时间戳
    jquery 鼠标经过延时触发事件,jquery插件
    jquery 克隆div 复制div 克隆元素 复制元素
    js实现一个可以兼容PC端和移动端的div拖动效果
    完美实现鼠标拖拽事件,解决各种小bug,基于jquery
    js将秒转换为 分:秒 函数
    php将秒转换为 分:秒 函数
    phpStudy启动失败时的解决方法 提示缺vc9运行库
  • 原文地址:https://www.cnblogs.com/lyghost/p/2736429.html
Copyright © 2011-2022 走看看