zoukankan      html  css  js  c++  java
  • 微信分享到朋友圈的脚本奥秘(转)

    微信最近推出的一个社交工具网站 www.faxinxi.la ,能发投票、活动、文章。

    但在微信外的浏览器包括PC端和移动端的都无法浏览这个网站任何内容,那是通过什么来控制的呢?通过微信内输出特定JS接口不太可能,那就只能通过Header信息里的User-agent了,实验后证实没错,通过探测可以知道微信内的User-agent信息:

    Mozilla/5.0 (iPhone; CPU iPhone OS 6_1_3 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Mobile/10B329 MicroMessenger/5.0.1

    就是通过识别MicroMessenger这个关键字来确定是否来自微信,通过浏览器的user-agent插件就可以轻松绕过这个限制。

    接下来就可以轻松获得www.faxinxi.la的网页源码,其实这不是一个微信官方的应用,服务端是用ASP.NET写的,而且是IIS服务器,有没有注入漏洞就不知道了,不过注入了也没什么实际价值,呵呵。

    为什么要挖掘他的网页源码呢,这才是关键。譬如你发一个投票,网址是http://www.faxinxila.com/post/vote, 但你填完所有信息按提交后,网页地址并没有发生跳转,而是ajax提交信息后弹出一个遮罩层,提示你点右上角的分享按钮,注意,点分享前网址一直保持在 /post/vote路径,但点开分享里的信息已经发生了变化,分享出去后,网址也发生了变化,变成了/vote/3投票实际的展示路径。 这是怎么做到的呢?

    查看faxinxi里唯一js文件,你会发现一个WeixinJSBridge的输出对象,再对比下通过微信公众平台发出来的文章源文件,也有 WeixinJSBridge对象脚本,问题迎刃而解,微信在内嵌webview里输出了WeixinJSBridge对象供web端js调用。 faxinxi已经将有用的js提取出来了,详细脚本如下:

    var dataForWeixin={
       appId:"",
       MsgImg:"http://img1.faxinxila.net/images/share_msg.png",
       TLImg:"http://img1.faxinxila.net/images/share.png",
       url:"http://faxinxi.la/vote/1",
       title:"input title here",
       desc:"input description here",
       fakeid:"",
       callback:function(){}
    };
    (function(){
       var onBridgeReady=function(){
       WeixinJSBridge.on('menu:share:appmessage', function(argv){
          WeixinJSBridge.invoke('sendAppMessage',{
             "appid":dataForWeixin.appId,
             "img_url":dataForWeixin.MsgImg,
             "img_width":"120",
             "img_height":"120",
             "link":dataForWeixin.url,
             "desc":dataForWeixin.desc,
             "title":dataForWeixin.title
          }, function(res){(dataForWeixin.callback)();});
       });
       WeixinJSBridge.on('menu:share:timeline', function(argv){
          (dataForWeixin.callback)();
          WeixinJSBridge.invoke('shareTimeline',{
             "img_url":dataForWeixin.TLImg,
             "img_width":"120",
             "img_height":"120",
             "link":dataForWeixin.url,
             "desc":dataForWeixin.desc,
             "title":dataForWeixin.title
          }, function(res){});
       });
       WeixinJSBridge.on('menu:share:weibo', function(argv){
          WeixinJSBridge.invoke('shareWeibo',{
             "content":dataForWeixin.title,
             "url":dataForWeixin.url
          }, function(res){(dataForWeixin.callback)();});
       });
       WeixinJSBridge.on('menu:share:facebook', function(argv){
          (dataForWeixin.callback)();
          WeixinJSBridge.invoke('shareFB',{
             "img_url":dataForWeixin.TLImg,
             "img_width":"120",
             "img_height":"120",
             "link":dataForWeixin.url,
             "desc":dataForWeixin.desc,
             "title":dataForWeixin.title
          }, function(res){});
       });
    };
    if(document.addEventListener){
       document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
    }else if(document.attachEvent){
       document.attachEvent('WeixinJSBridgeReady'   , onBridgeReady);
       document.attachEvent('onWeixinJSBridgeReady' , onBridgeReady);
    }
    })();
    

     转至:http://blog.4wer.com/wechat-timeline-share

  • 相关阅读:
    linux驱动开发学习一:创建一个字符设备
    如何高效的对有序数组去重
    找到缺失的第一个正整数
    .NET不可变集合已经正式发布
    中国人唯一不认可的成功——就是家庭的和睦,人生的平淡【转】
    自己动手搭建 MongoDB 环境,并建立一个 .NET HelloWorld 程序测试
    ASP.NET MVC 中如何用自定义 Handler 来处理来自 AJAX 请求的 HttpRequestValidationException 错误
    自己动手搭建 Redis 环境,并建立一个 .NET HelloWorld 程序测试
    ServiceStack 介绍
    一步一步实战扩展 ASP.NET Route,实现小写 URL、个性化 URL
  • 原文地址:https://www.cnblogs.com/lichuntian/p/4617947.html
Copyright © 2011-2022 走看看