react webview打开html5,react-native WebView里的url使用浏览器打开

本文介绍了如何在React Native的WebView组件中处理HTML5页面的a标签点击事件,防止默认跳转并利用window.postMessage传递URL到React Native。通过监听onMessage事件并使用Linking.openURL打开链接,确保链接在系统浏览器中打开。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

思路是用js阻止html页面a标签跳转,把要跳转的url地址传到react-native里,使用Linking打开应用进行跳转

具体实现步骤如下:

先简单写一段js代码(代码结尾必须要写分号,不然会出错的,我也不知道为什么),这段代码的作用是获取html页面里的所有a标签,在点击它们的时候阻止默认跳转事件,并且把要跳转的url地址通过window.postMessage方法传到react-native

通过injectJavaScript方法把这段js注入到WebView加载进来的html中

_injectJavaScript = () => `

var a = document.getElementsByTagName('a');

for(var i = 0; i < a.length; i++){

a[i].onclick = function (event) {

window.postMessage(this.href);

event.preventDefault();

}

}

`

使用onMessage方法接收html页面传过来要跳转的url地址,使用Linking打开应用进行跳转

_onMessage = (e) => {

Linking.openURL(e.nativeEvent.data).catch(err => console.error('An error occurred', err))

}

完整代码如下

import React, { Component } from 'react'

import { WebView, Linking, AppRegistry } from 'react-native'

class AwesomeProject extends Component {

_injectJavaScript = () => `

var a = document.getElementsByTagName('a');

for(var i = 0; i < a.length; i++){

a[i].onclick = function (event) {

window.postMessage(this.href);

event.preventDefault();

}

}

`

_onMessage = (e) => {

Linking.openURL(e.nativeEvent.data).catch(err => console.error('An error occurred', err))

}

render() {

return (

onMessage={this._onMessage}

style={{flex: 1}}

source={{uri: 'http://www.jianshu.com'}}

injectedJavaScript={this._injectJavaScript()}

/>

)

}

}

AppRegistry.registerComponent('AwesomeProject', () => AwesomeProject)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值