share.js 2.72 KB
let shareData = {
    title: '',
    link: '',
    desc: '逛',
    imgUrl: 'http://static.yohobuy.com/m/v1/img/touch/apple-touch-icon-144x144-precomposed-new.png'
};

function loadScript(url, success) {
  const head = document.getElementsByTagName('head')[0];
  let script = document.createElement('script');

  script.type = 'text/javascript';
  script.onload = script.onreadystatechange = function() {
    if (!this.readyState || this.readyState === "loaded" || this.readyState === "complete" ) {
      success && success();
      script.onload = script.onreadystatechange = null;
    }
  };
  script.src= url;
  head.appendChild(script);
}

function jsonp(url, data = {}) {
  return new Promise((resolve, reject) => {
    let JSONP = document.createElement("script");
    let query = [];

    data.callback = 'jsonCallBack';
    Object.keys(data).forEach(key => {
      query.push(key + '=' + data[key]);
    });

    window.jsonCallBack = (result) => {
      resolve(result);
    };

    JSONP.type = "text/javascript";
    JSONP.src = `${url}?${query.join('&')}`;
    const head = document.getElementsByTagName("head")[0];
    head.appendChild(JSONP);

    setTimeout(() => {
      head.removeChild(JSONP)
    }, 500);
  })
}

function init(qs) {
  if (/QQ/i.test(navigator.userAgent)) {
    loadScript('//qzonestyle.gtimg.cn/qzone/qzact/common/share/share.js', function() {
      window.setShareInfo && window.setShareInfo({
          title: shareData.title,
          summary: shareData.desc,
          pic: shareData.imgUrl,
          url: shareData.link
      });
    });
  }

  if (/MicroMessenger/i.test(navigator.userAgent)) {
    loadScript('//res.wx.qq.com/open/js/jweixin-1.3.2.js', () => {
      jsonp(location.protocol + '//m.yohobuy.com/activity/wechat/share', {
        url: location.href
      }).then(res => {
        if (window.wx) {
          window.wx.config({
              debug: false,
              appId: res.appId,
              timestamp: res.timestamp,
              nonceStr: res.nonceStr,
              signature: res.signature,
              jsApiList: jsApiList
          });
        }
      })
    });
  }

  if (qs && qs.share_id) {
    jsonp(location.protocol + '//m.yohobuy.com/activity/share', {
      shareId: qs.share_id
    }).then(res => {
      if (res && res.code === 200 && res.data) {
        shareData.desc = res.data.content || res.data.title;
        shareData.imgUrl = res.data.pic;
        shareData.title = res.data.title;
      };
    });
  }
}

export default {
  init,
  setShareInfo(data) {
    Object.assign(shareData, data);

    window.setShareInfo && window.setShareInfo({
      title: shareData.title,
      summary: shareData.desc,
      pic: shareData.imgUrl,
      url: shareData.link || location.href
    });
  }
}