小程序跳转到h5页面

news/2025/3/29 1:12:35/

本组件使用useState、WebView、Taro的钩子,以及taro-hooks中的useRouter。组件内部使用了useRouter获取路由信息,从存储中获取openId和TOKEN,然后通过useReady生命周期钩子设置URL。分享功能部分使用useShareAppMessage处理,构建分享的路径和标题。最后,拼接URL参数并返回WebView组件

代码实现

import { useState } from 'react';
import { WebView } from '@tarojs/components';
import Taro, { useReady, useShareAppMessage } from '@tarojs/taro';
import { useRouter } from 'taro-hooks';const WebViewPage = () => {const [routerInfo] = useRouter();// v2.4.4 新增openid 后端在php支付用const openId = Taro.getStorageSync('openId');const cookies = Taro.getStorageSync(TOKEN);const { params, path } = routerInfo;const { title } = params;const [readyUrl, setReadyUrl] = useState('');useReady(() => {const realUrl = Taro?.getCurrentInstance()?.router?.params?.url;setReadyUrl(realUrl || '');});useShareAppMessage(({ webViewUrl }) => {const url = new URL(webViewUrl as string);const searchParams = new URLSearchParams(url.search);searchParams.delete('cuid');searchParams.delete('customersalt');searchParams.delete('open_id');url.search = searchParams.toString();const sharedSearchParams = new URLSearchParams();sharedSearchParams.append('url', decodeURIComponent(url.href));title && sharedSearchParams.append('title', decodeURIComponent(title));return {title: title || 'title',path: `/${path}?${sharedSearchParams.toString()}`};});const decodeUrl = decodeURIComponent(readyUrl || '');const qMark = decodeUrl.indexOf('?') > -1 ? '' : '?';const src = `${decodeUrl}${qMark}&source=yl_mini_program&customersalt=${encodeURIComponent(cookies || '')}&cuid=${encodeURIComponent(cookies || '')}&open_id=${openId}`;if (readyUrl?.trim?.()) {return <WebView src={src} />;}
};
export default WebViewPage;

使用

//使用 encodeURIComponent 确保特殊字符安全传输<ViewonClick={() => {Taro.navigateTo({url: `/pages/webview/webview?url=${encodeURIComponent('目标h5的页面地址:')}`});}}></View>

总结

  • 动态网页加载:支持外部 URL 传入

  • 身份认证透传:自动附加登录态参数

  • 安全分享机制:生成去敏化的分享链接

  • 多平台适配:通过 Taro 实现跨小程序平台运行

适用于需要在小程序中嵌入 H5 页面且要求保持登录态的业务场景,如:医疗问诊、电商支付等需要网页与原生混合开发的场景


http://www.ppmy.cn/news/1583226.html

相关文章

关于CNN,RNN,GAN,GNN,DQN,Transformer,LSTM,DBN你了解多少

以下是神经网络中常见的几种模型的简要介绍&#xff1a; 1. ​CNN (Convolutional Neural Network, 卷积神经网络) ​用途: 主要用于图像处理和计算机视觉任务。​特点: 通过卷积核提取局部特征&#xff0c;具有平移不变性&#xff0c;能够有效处理高维数据&#xff08;如图像…

智能汽车图像及视频处理方案,支持视频实时拍摄特效能力

在智能汽车日新月异的今天&#xff0c;美摄科技作为智能汽车图像及视频处理领域的先行者&#xff0c;凭借其卓越的技术实力和前瞻性的设计理念&#xff0c;为全球智能汽车制造商带来了一场视觉盛宴的革新。美摄科技推出智能汽车图像及视频处理方案&#xff0c;一个集高效性、智…

The First项目报告:Layer 2 时代的先锋Epic Chain

随着区块链行业的不断演进&#xff0c;新兴公链项目不断涌现&#xff0c;推动整个生态体系向更高效、更安全、更智能的方向发展。Epic Chain作为一条创新型区块链&#xff0c;以高性能架构、跨链兼容性和去中心化金融&#xff08;DeFi&#xff09;生态为核心&#xff0c;正迅速…

深度解析「前缀和」与「差分法」:高效算法的基石

深度解析前缀和与差分法&#xff1a;高效算法的基石 在计算机科学和数据处理领域&#xff0c;前缀和&#xff08;Prefix Sum&#xff09;与差分法&#xff08;Difference Method&#xff09;是两种基础且高效的算法技术。它们在处理数组的区间查询和区间修改操作时&#xff0c…

【后端】【Django】Django DRF API 单元测试完整方案(基于 `TestCase`)

Django DRF API 单元测试完整方案&#xff08;基于 TestCase&#xff09; 一、方案概述 使用 django.test.TestCase 和 rest_framework.test.APIClient 进行 API 单元测试&#xff0c;确保 API 正确性、权限控制、数据返回格式、业务逻辑 等。 二、基本步骤 使用 setUp() 初始…

Qt中10倍提升动态截屏及渲染60帧/秒

Qt中10倍提升动态截屏及渲染60帧/秒 理解模态窗口和非模态窗口 在C中&#xff0c;窗口的**模态&#xff08;Modal&#xff09;和非模态&#xff08;Modeless&#xff09;**显示是两种不同的对话框或窗口行为模式&#xff0c;主要区别体现在用户交互和程序流程控制上。以下是它…

如何根据目标网站调整Python爬虫的延迟时间?

一、为什么需要调整爬虫的延迟时间&#xff1f; 1. 反爬虫机制的挑战 大多数网站&#xff08;尤其是电商平台如淘宝&#xff09;都部署了反爬虫机制&#xff0c;用于检测异常的访问行为。如果爬虫的请求频率过高&#xff0c;可能会触发以下反制措施&#xff1a; IP封禁&…

大数据学习(86)-Zookeeper去中心化调度

&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一…