index.vue 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. <template>
  2. <view class="webview-container">
  3. <web-view :src="url" @message="handleMessage"></web-view>
  4. </view>
  5. </template>
  6. <script>
  7. export default {
  8. data() {
  9. return {
  10. url: ''
  11. }
  12. },
  13. onLoad(options) {
  14. if (options.url) {
  15. // 解码 URL
  16. this.url = decodeURIComponent(options.url)
  17. }
  18. if (options.title) {
  19. // 解码 title
  20. let title = decodeURIComponent(options.title)
  21. if (title) {
  22. uni.setNavigationBarTitle({
  23. title: title
  24. })
  25. }
  26. }
  27. },
  28. methods: {
  29. handleMessage(e) {
  30. const message = e.detail.data[0]
  31. console.log('收到来自 web 页面的消息:', message)
  32. // 根据消息类型处理
  33. switch (message.type) {
  34. case 'close':
  35. // 关闭页面
  36. uni.navigateBack()
  37. break
  38. case 'share':
  39. // 处理分享
  40. this.handleShare(message.data)
  41. break
  42. case 'login':
  43. // 处理登录
  44. this.handleLogin(message.data)
  45. break
  46. case 'payment':
  47. // 处理支付
  48. this.handlePayment(message.data)
  49. break
  50. default:
  51. console.log('未知消息类型:', message.type)
  52. }
  53. },
  54. // 处理分享
  55. handleShare(data) {
  56. uni.share({
  57. provider: "weixin",
  58. scene: "WXSceneSession",
  59. type: 0,
  60. title: data.title || '',
  61. summary: data.desc || '',
  62. imageUrl: data.imageUrl || '',
  63. href: data.url || '',
  64. success: function (res) {
  65. console.log("success:" + JSON.stringify(res));
  66. },
  67. fail: function (err) {
  68. console.log("fail:" + JSON.stringify(err));
  69. }
  70. });
  71. },
  72. // 处理登录
  73. handleLogin(data) {
  74. // 这里可以根据实际需求处理登录逻辑
  75. console.log('处理登录:', data)
  76. },
  77. // 处理支付
  78. handlePayment(data) {
  79. // 这里可以根据实际需求处理支付逻辑
  80. console.log('处理支付:', data)
  81. }
  82. }
  83. }
  84. </script>
  85. <style lang="scss">
  86. .webview-container {
  87. width: 100%;
  88. height: 100vh;
  89. }
  90. </style>