天天看点

分享微信和qq

/** obj格式
 var obj = {
        appId: '',
        timestamp: '',
        nonceStr: '',
        signature: '',
        infor: {
            title: '',
            desc: '',
            link: '',
            imgUrl: ''
        }
    }
 */
var es = [];
$('script').each(function () {
    var esSrc = $(this).attr('src') || '';
    es.push(esSrc);
});

var head = document.querySelectorAll('head')[],
    wxScript = document.createElement('script');

wxScript.type = 'text/javascript';
wxScript.addEventListener('load', onScriptLoad);
var ua = navigator.userAgent.toLowerCase();
if (ua.match(/MicroMessenger/i) == 'micromessenger') {
    //console.log("微信");
    //alert("微信");
    wxScript.src = 'http://res.wx.qq.com/open/js/jweixin-1.2.0.js';
} else if (ua.match(/QQ/i) == 'qq') {
    //console.log("QQ");
    //alert("QQ");
    wxScript.src = 'http://qzonestyle.gtimg.cn/qzone/qzact/common/share/share.js';
}
head.appendChild(wxScript);

var toShareObj = {};
toShareObj.infor = {};
toShareObj.infor.title = '';
toShareObj.infor.desc = '';
toShareObj.infor.imgUrl = '';

function ramInfor(str, type, img) {

    toShareObj.infor.imgUrl = img || '默认图片的地址';
    $.ajax({
        type: 'get',
        url: 'config接口',
        cache: false,//不缓存ajax
        dataType: 'json',
        data: {
            url: location.href.split('#')[]
        },
        success: function (json) {
            console.log(json)
            toShareObj.appId = json.appId;
            toShareObj.timestamp = json.timestamp;
            toShareObj.nonceStr = json.nonceStr;
            toShareObj.signature = json.signature;
            toShareObj.infor.link = window.location.href;
            //js判断微信和QQ
            if (ua.match(/MicroMessenger/i) == 'micromessenger') {
                //console.log(“微信”);
                wxShare(toShareObj);
            } else if (ua.match(/QQ/i) == 'qq') {
                //console.log(“QQ”);
                qqShare(toShareObj)
            }
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            /*错误信息处理*/
            console.log('XMLHttpRequest:' + XMLHttpRequest);
            console.log('textStatus:' + textStatus);
            console.log('errorThrown:' + errorThrown);
        }
    });
}


//判断script是否加载完成
function onScriptLoad(e) {
    // alert('onScriptLoad');
    e = e || window.event;
    var wxScriptState = e.target || e.srcElement;
    //加载完成
    if (/loaded|complete|undefined/.test(wxScript.readyState)) {
        wxScriptState.removeEventListener('load', onScriptLoad);
    }
}

//微信分享api
function wxShare(obj) {
    // alert('obj');
    var objAppId = obj.appId, objTimestamp = obj.timestamp, objNonceStr = obj.nonceStr, objSignature = obj.signature;
    var objTitle = obj.infor.title, objDesc = obj.infor.desc, objLink = obj.infor.link, objImgUrl = obj.infor.imgUrl;
    console.log(obj)
    wx.config({
        debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
        appId: objAppId, // 必填,公众号的唯一标识
        timestamp: objTimestamp, // 必填,生成签名的时间戳
        nonceStr: objNonceStr, // 必填,生成签名的随机串
        signature: objSignature,// 必填,签名,见附录1
        jsApiList: [// 必填,需要使用的JS接口列表,所有JS接口列表见附录2
            'onMenuShareTimeline',
            'onMenuShareAppMessage',
            'onMenuShareQQ',
            'onMenuShareQZone'
        ]
    });
    wx.ready(function () {
        //config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,
        //config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。
        //对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
        //分享到朋友圈
        wx.onMenuShareTimeline({
            title: objTitle, // 分享标题
            link: objLink, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
            imgUrl: objImgUrl, // 分享图标
            success: function () {
                // 用户确认分享后执行的回调函数
            },
            cancel: function () {
                // 用户取消分享后执行的回调函数
            }
        });
        //分享给朋友
        wx.onMenuShareAppMessage({
            title: objTitle, // 分享标题
            desc: objDesc, // 分享描述
            link: objLink, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
            imgUrl: objImgUrl, // 分享图标
            success: function () {
                // 用户确认分享后执行的回调函数
            },
            cancel: function () {
                // 用户取消分享后执行的回调函数
            }
        });
        //分享到QQ
        wx.onMenuShareQQ({
            title: objTitle, // 分享标题
            desc: objDesc, // 分享描述
            link: objLink, // 分享链接
            imgUrl: objImgUrl, // 分享图标
            success: function () {
                // 用户确认分享后执行的回调函数
            },
            cancel: function () {
                // 用户取消分享后执行的回调函数
            }
        });
        //分享到QQ空间
        wx.onMenuShareQZone({
            title: objTitle, // 分享标题
            desc: objDesc, // 分享描述
            link: objLink, // 分享链接
            imgUrl: objImgUrl, // 分享图标
            success: function () {
                // 用户确认分享后执行的回调函数
            },
            cancel: function () {
                // 用户取消分享后执行的回调函数
            }
        });
    });
    wx.error(function (res) {
        // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
    });
}

//qq分享api
function qqShare(obj) {
    var objAppId = obj.appId, objTimestamp = obj.timestamp, objNonceStr = obj.nonceStr, objSignature = obj.signature;
    var objTitle = obj.infor.title, objDesc = obj.infor.desc, objLink = obj.infor.link, objImgUrl = obj.infor.imgUrl;
    setShareInfo({
        title: objTitle,
        summary: objDesc,
        pic: objImgUrl,
        url: objLink,
        WXconfig: {
            swapTitleInWX: false,// 是否标题内容互换(仅朋友圈,因朋友圈内只显示标题)
            appId: objAppId,
            timestamp: objTimestamp,
            nonceStr: objNonceStr,
            signature: objSignature
        }
    });
}