h5与原生实现分享功能

10 篇文章 0 订阅
3 篇文章 0 订阅

写一个安卓和ios端与H5的分享交互的功能

ios端给出的效果图
请添加图片描述

首先在utils文件中建了一个 bridge.js 文件 ,并写入如下代码

function setupWebViewJavascriptBridge (callback) {
    if (window.WebViewJavascriptBridge) {
      return callback(window.WebViewJavascriptBridge)
    }
    if (window.WVJBCallbacks) {
      return window.WVJBCallbacks.push(callback)
    }
    window.WVJBCallbacks = [callback]
    var WVJBIframe = document.createElement('iframe')
    WVJBIframe.style.display = 'none'
    WVJBIframe.src = 'https://__bridge_loaded__'
    document.documentElement.appendChild(WVJBIframe)
    setTimeout(function () {
      document.documentElement.removeChild(WVJBIframe)
    }, 0)
  }
  
  export default {
    callhandler (name, data, callback) {
      setupWebViewJavascriptBridge(function (bridge) {
        bridge.callHandler(name, data, callback)
      })
    },
    registerhandler (name, callback) {
      setupWebViewJavascriptBridge(function (bridge) {
        bridge.registerHandler(name, function (data, responseCallback) {
          callback(data, responseCallback)
        })
      })
    }
  }

其后在main.js中引入全局

// vue与ios通信
import Bridge from './util/bridge.js';
Vue.prototype.$bridge = Bridge

最后在我需要分享的页面
1.先要判断是安卓还是ios

 var u = navigator.userAgent
 var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1 // android终端
 var isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/) // ios终端

2.完整的分享 已进入页面就使用
注意:在浏览器上的话会报messageHandlers的错误,但是手机上应该不会的
请添加图片描述

 mounted() {
    var that = this;
    setTimeout(() => {
      var u = navigator.userAgent
      var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1 // android终端
      var isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/) // ios终端
      if (isAndroid) { // 调用安卓方法
        that.$bridge.callhandler(
        'shareContent',{
          iconUrl:that.courseCoverImg,    // 分享图
          title:that.courseName,   // 分享的标题
          content:that.courseBrief,   // 分享的内容
          shareLink: window.location.href,    // 分享的地址  效果图给的地址不全,后改为现在的window.location.href
          isNeedShare:true // 判断是否显示
          }
      )
      }
      if (isIOS) { // 调用iOS方法
        window.webkit.messageHandlers.shareContent.postMessage({
           iconUrl:that.courseCoverImg,
          title:that.courseName,
          content:that.courseBrief,
          shareLink: window.location.href,  // 当前页面的地址
          isNeedShare:true
        })
      }
    }, 500);
  }
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值