小程序跳转到h5页面

devtools/2025/3/26 9:32:04/

本组件使用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/devtools/171316.html

相关文章

怎么绑定一个计算属性或数据属性来控制元素的类名

在 Vue 中&#xff0c;你可以通过绑定计算属性或数据属性来控制元素的类名&#xff0c;这样能避免直接操作 DOM&#xff0c;符合 Vue 的响应式原理。下面分别介绍如何使用计算属性和数据属性来控制类名。 使用计算属性控制类名 使用计算属性控制类名 计算属性是基于响应式依赖进…

基于SpringBoot的电影售票系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

用Deepseek + Kimi 快速生成高质量的ppt

AI系列文章&#xff1a; AWS AI认证考试中经常提及几个重要的工具介绍 简单理解机器学习中top_k、top_p、temperature三个参数的作用 用Deepseek Kimi 快速生成高质量的ppt 在职场&#xff0c;不管干什么&#xff0c;都少不了和 PPT 打交道&#xff1a;客户交流&#xff0c…

linux-------------进程概念(中)

1.进程状态 为了弄明⽩正在运⾏的进程是什么意思&#xff0c;我们需要知道进程的不同状态。⼀个进程可以有⼏个状 态&#xff08;在Linux内核⾥&#xff0c;进程有时候也叫做任务&#xff09;。 下⾯的状态在kernel源代码⾥定义&#xff1a; static const char *const task_s…

【开源宝藏】用 JavaScript 手写一个丝滑的打字机动画效果

你当前项目实现了一个非常丝滑的 打字机文字效果动画&#xff0c;使用的是自定义的 typical.js 脚本。下面我将给出一份逐步拆解的中文教程&#xff0c;帮你或其他初学者快速上手并自定义这个打字效果。 ✨ 最终效果 打开页面后&#xff0c;中央会逐字显示&#xff1a; Hello…

青少年编程与数学 02-011 MySQL数据库应用 17课题、事务处理

青少年编程与数学 02-011 MySQL数据库应用 17课题、事务处理 一、事务处理&#xff08;一&#xff09;、事务的基本概念&#xff08;二&#xff09;、事务的使用场景&#xff08;三&#xff09;、事务的控制语句 二、隔离级别&#xff08;一&#xff09;、读未提交&#xff08;…

tryhackme——The Lay of the Land

文章目录 一、网络基础设施1.1 内网1.2 DMZ区1.3 网络枚举&#xff08;Network Enumeration&#xff09; 二、域环境三、用户和组管理四、安全解决方案4.1 基于主机的安全解决方案4.1.1 防病毒软件4.1.2 Microsoft Windows Defender4.1.3 主机防火墙4.1.4 安全事件记录与监控4.…

【设计模式】策略模式(Strategy Pattern)详解

策略模式&#xff08;Strategy Pattern&#xff09;详解 一、策略模式的定义 策略模式&#xff08;Strategy Pattern&#xff09;是一种行为型设计模式&#xff0c;它定义了一组算法&#xff0c;将每个算法封装起来&#xff0c;并使它们可以相互替换&#xff0c;从而让算法的…