zoukankan      html  css  js  c++  java
  • taro 跳转 webview

    1.封装工具类

    utils/jump.js

    import Taro from '@tarojs/taro'
    
    const PAGE_WEBVIEW = '/pages/webview/webview'
    
    /**
     * // NOTE 后端返回的 url 可能是网页链接,需要在 webview 中打开
     * 也可能是小程序自身的链接,只能用 navigate/redirect 之类的打开
     * 就需要有个地方统一判断处理
     */
    export default function jump(options) {
      const { url, title = '', payload = {}, method = 'navigateTo' } = options
    
      if (/^https?:///.test(url)) {
        Taro[method]({
          url: urlStringify(PAGE_WEBVIEW, { url, title })
        })
      } else if (/^/pages//.test(url)) {
        // TODO H5 不支持 switchTab,暂时 hack 下
        if (process.env.TARO_ENV === 'h5' && method === 'switchTab') {
          Taro.navigateBack({ delta: Taro.getCurrentPages().length - 1 })
          setTimeout(() => { Taro.redirectTo({ url }) }, 100)
          return
        }
    
        Taro[method]({
          url: urlStringify(url, payload)
        })
      }
    }
    
    function urlStringify(url, payload, encode = true) {
      const arr = Object.keys(payload).map(key =>
        `${key}=${encode ? encodeURIComponent(payload[key]) : payload[key]}`
      )
    
      // NOTE 注意支付宝小程序跳转链接如果没有参数,就不要带上 ?,否则可能无法跳转
      return arr.length ? `${url}?${arr.join('&')}` : url
    }
    

    2.webview 页面

    src/pages/webview/webview.js

    import Taro, { Component } from '@tarojs/taro'
    import { View, WebView } from '@tarojs/components'
    /**
     * // NOTE Taro 的 RN 端还未提供 WebView 组件,可以引入原生组件来解决
     * (备注:Taro v1.2.16 已支持,这块代码还是保留作为演示)
     *
     * Taro 有开启了 tree shaking,对于未用到的内容编译时会自动去除
     * 因此可以把相应端的内容都 import 进来,再根据环境进行调用即可
     *
     * 另外 1.2.17 版本有提供了统一接口方式 https://nervjs.github.io/taro/docs/envs.html
     * 可以参考 ./src/pages/user-login 中的实现
     */
    import WebViewRN from './rn'
    import './webview.scss'
    
    export default class extends Component {
      config = {
        navigationBarTitleText: ''
      }
    
      url = ''
      title = ''
    
      componentWillMount() {
        this.url = decodeURIComponent(this.$router.params.url || '')
        this.title = decodeURIComponent(this.$router.params.title || '')
        Taro.setNavigationBarTitle({ title: this.title })
      }
    
      render () {
        return (
          <View className='webview'>
            {/* // NOTE 编译时只会保留相应端的内容,因此非 RN 端时不会编译 WebViewRN */}
            {process.env.TARO_ENV === 'rn' ?
              <WebViewRN src={this.url} /> :
              <WebView src={this.url} />
            }
          </View>
        )
      }
    }
    

    src/pages/webview/webview.scss

    .webview {
      height: 100%;
    }

    src/pages/webview/rn/index.js

    /**
     * React Native 原生组件
     */
    import Taro, { Component } from '@tarojs/taro'
    import { WebView } from 'react-native'
    
    export default class WebViewRN extends Component {
      render() {
        return (
          <WebView
            style={{ height: '100%' }}
            originWhitelist={['*']}
            source={{ uri: this.props.src }}
          />
        )
      }
    }
    

    .

  • 相关阅读:
    Java程序:从命令行接收多个数字,求和并输出结果
    大道至简读后感
    大道至简第一章读后感Java伪代码
    Creating a SharePoint BCS .NET Connectivity Assembly to Crawl RSS Data in Visual Studio 2010
    声明式验证超时问题
    Error message when you try to modify or to delete an alternate access mapping in Windows SharePoint Services 3.0: "An update conflict has occurred, and you must re-try this action"
    Upgrading or Redeploying SharePoint 2010 Workflows
    Upgrade custom workflow in SharePoint
    SharePoint 2013中Office Web Apps的一次排错
    How to upgrade workflow assembly in MOSS 2007
  • 原文地址:https://www.cnblogs.com/crazycode2/p/12875926.html
Copyright © 2011-2022 走看看