当前位置: 首页 > news >正文

小程序跳转到h5页面

本组件使用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 确保特殊字符安全传输
 <View
      onClick={() => {
          Taro.navigateTo({
            url: `/pages/webview/webview?url=${encodeURIComponent('目标h5的页面地址:')}`
          });
      }}
    >
    </View>

总结

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

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

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

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

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

相关文章:

  • 双指针技巧在C++中的应用:从基础到进阶
  • MATLAB 中,并行池(Parallel Pool)自动关闭的情况
  • AI比人脑更强,因为被植入思维模型【24】替身决策思维模型
  • 详细说明windows系统函数::SetUnhandledExceptionFilter(ExceptionFilter)
  • 哈希表简单例子
  • BCC-调度组件分析
  • Skynet.socket 函数族使用详解
  • MantisBT在Windows10上安装部署详细步骤
  • 计算机体系结构及存储系统入门
  • 性能测试、负载测试、压力测试的全面解析
  • Oracle无法正常OPEN(二)
  • 优选算法系列(4.前缀和_上)
  • Ubuntu20.0.4创建ssh key以及repo命令的使用
  • 蓝桥杯第十届 数的分解
  • 传输层安全协议 SSL/TLS 详细介绍
  • 画秒杀系统流程图
  • HTB 笔记 | SQL 注入基础 + 实操小练习 P2
  • Git 是什么
  • Unity知识点快速回顾系列
  • UART转APB模块ModelSim仿真
  • 品牌设计公司网站/汕头seo快速排名
  • 美女做基网站/襄阳网站seo
  • 外贸怎么做网站/百度指数入口
  • 网站开发公司杭州/南京关键词优化软件
  • 商城建设开发/seo网站优化公司
  • 网站排名工具/免费的网站推广方法