79 lines
1.6 KiB
Vue
79 lines
1.6 KiB
Vue
<template>
|
|
<view class="webview-container">
|
|
<!-- web-view 组件用于显示外部网页 -->
|
|
<web-view :src="webUrl" @message="handleMessage" @load="handleLoad" @error="handleError"></web-view>
|
|
</view>
|
|
</template>
|
|
|
|
<script setup>
|
|
import { onLoad } from '@dcloudio/uni-app'
|
|
import { ref } from 'vue';
|
|
|
|
import { useI18n } from '@/utils/i18n.js'
|
|
|
|
const { t } = useI18n()
|
|
|
|
// 网页链接
|
|
const webUrl = ref('')
|
|
|
|
// 页面加载时获取传入的 URL 参数
|
|
onLoad((options) => {
|
|
if (options.url) {
|
|
// 解码 URL
|
|
webUrl.value = decodeURIComponent(options.url)
|
|
console.log('加载外部链接:', webUrl.value)
|
|
} else {
|
|
uni.showToast({
|
|
title: t('common.invalidUrl') || '无效的链接',
|
|
icon: 'none',
|
|
duration: 2000
|
|
})
|
|
// 2秒后返回上一页
|
|
setTimeout(() => {
|
|
uni.navigateBack()
|
|
}, 2000)
|
|
}
|
|
})
|
|
|
|
// 网页加载完成
|
|
const handleLoad = (e) => {
|
|
console.log('网页加载完成:', e)
|
|
}
|
|
|
|
// 网页加载错误
|
|
const handleError = (e) => {
|
|
console.error('网页加载错误:', e)
|
|
uni.showToast({
|
|
title: t('common.loadFailed') || '加载失败',
|
|
icon: 'none'
|
|
})
|
|
}
|
|
|
|
// 接收网页消息(web-view 向小程序发送消息)
|
|
const handleMessage = (e) => {
|
|
console.log('收到网页消息:', e)
|
|
// 可以根据需要处理网页发来的消息
|
|
}
|
|
</script>
|
|
|
|
<script>
|
|
export default {
|
|
// 支持分享
|
|
onShareAppMessage() {
|
|
const $t = this.$t || ((key) => key)
|
|
return {
|
|
title: $t('share.title') || '分享',
|
|
path: '/pages/index/index'
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
.webview-container {
|
|
width: 100vw;
|
|
height: 100vh;
|
|
overflow: hidden;
|
|
}
|
|
</style>
|