没有互联网时反应本机 webview
React Native webview when does not have internet
我想在 webview 没有 internet 时显示一条没有 internet 的消息。我搜索了关于它的东西,但没有找到。有人能帮我吗 ?抱歉,我是 react-native 的新手。
EDIT 1
import React, { Component } from 'react'
import { StyleSheet, Text, View, NetInfo } from 'react-native';
import WebViewComp from './web_view_comp.js'
export default class App extends Component {
constructor(){
super();
this.state={
connection_Status : ""
}
}
componentDidMount() {
NetInfo.isConnected.addEventListener(
'connectionChange',
this._handleConnectivityChange
);
NetInfo.isConnected.fetch().done((isConnected) => {
if(isConnected == true){
this.setState({connection_Status : "Online"})
}
else{
this.setState({connection_Status : "Offline"})
}
});
}
componentWillUnmount() {
NetInfo.isConnected.removeEventListener(
'connectionChange',
this._handleConnectivityChange
);
}
_handleConnectivityChange = (isConnected) => {
if(isConnected == true){
this.setState({connection_Status : "Online"})
}
else{
this.setState({connection_Status : "Offline"})
}
};
render() {
if (this.state.connection_Status == "Online") {
return (
<WebViewComp/>
)
} else {
return (
<View style={styles.MainContainer}>
<Text style={{fontSize: 20, textAlign: 'center', marginBottom: 20}}> Você está { this.state.connection_Status }</Text>
</View>
)
}
}
}
const styles = StyleSheet.create({
MainContainer: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#F5FCFF',
padding: 20
},
TextStyle: {
fontSize:20,
textAlign: 'center',
}
});
`
我根据帮助编辑了代码,得到了这个结果,但是我相信如果这个人连接了移动互联网并且没有移动数据可能会有问题。
react-native 的 WebView 有一个 props 调用 onMessage
,你可以用它来了解 url 当你没有互联网时的响应。
onWebViewMessage(event: any) {
let msgData;
try {
// msgData will have the url from webview
// and event have another props
msgData = event.nativeEvent.data;
// check and do something
} catch (err) {
console.warn(err);
return;
}
...
}
<WebView
source={{ uri: "http://www.youtube.com/" }}
onMessage={this.onWebViewMessage}
...
/>
希望对你有所帮助,我不记得具体如何使用它,但我认为这是一个很好的开始方式
您可以像这样使用 WebView
的 onError
事件:
//declarations and imports
state={isError:false}
render(){
return(
<WebView onError={()=>alert("Something went wrong")} />
)}
如果您想知道是否有互联网,请跟踪 onError
的错误。
您可以使用 React Native NetInfo 这是来自文档的示例:
NetInfo.isConnected.fetch().then(isConnected => {
console.log('First, is ' + (isConnected ? 'online' : 'offline'));
});
function handleFirstConnectivityChange(isConnected) {
console.log('Then, is ' + (isConnected ? 'online' : 'offline'));
NetInfo.isConnected.removeEventListener(
'connectionChange',
handleFirstConnectivityChange
);
}
NetInfo.isConnected.addEventListener(
'connectionChange',
handleFirstConnectivityChange
);
如果您想检查特定的 URL,您可以发送请求并更新状态
let req = await fetch('https://www.someurl.com');
让 isConnected = req.status === 200;
我想在 webview 没有 internet 时显示一条没有 internet 的消息。我搜索了关于它的东西,但没有找到。有人能帮我吗 ?抱歉,我是 react-native 的新手。
EDIT 1
import React, { Component } from 'react'
import { StyleSheet, Text, View, NetInfo } from 'react-native';
import WebViewComp from './web_view_comp.js'
export default class App extends Component {
constructor(){
super();
this.state={
connection_Status : ""
}
}
componentDidMount() {
NetInfo.isConnected.addEventListener(
'connectionChange',
this._handleConnectivityChange
);
NetInfo.isConnected.fetch().done((isConnected) => {
if(isConnected == true){
this.setState({connection_Status : "Online"})
}
else{
this.setState({connection_Status : "Offline"})
}
});
}
componentWillUnmount() {
NetInfo.isConnected.removeEventListener(
'connectionChange',
this._handleConnectivityChange
);
}
_handleConnectivityChange = (isConnected) => {
if(isConnected == true){
this.setState({connection_Status : "Online"})
}
else{
this.setState({connection_Status : "Offline"})
}
};
render() {
if (this.state.connection_Status == "Online") {
return (
<WebViewComp/>
)
} else {
return (
<View style={styles.MainContainer}>
<Text style={{fontSize: 20, textAlign: 'center', marginBottom: 20}}> Você está { this.state.connection_Status }</Text>
</View>
)
}
}
}
const styles = StyleSheet.create({
MainContainer: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#F5FCFF',
padding: 20
},
TextStyle: {
fontSize:20,
textAlign: 'center',
}
});
`
我根据帮助编辑了代码,得到了这个结果,但是我相信如果这个人连接了移动互联网并且没有移动数据可能会有问题。
react-native 的 WebView 有一个 props 调用 onMessage
,你可以用它来了解 url 当你没有互联网时的响应。
onWebViewMessage(event: any) {
let msgData;
try {
// msgData will have the url from webview
// and event have another props
msgData = event.nativeEvent.data;
// check and do something
} catch (err) {
console.warn(err);
return;
}
...
}
<WebView
source={{ uri: "http://www.youtube.com/" }}
onMessage={this.onWebViewMessage}
...
/>
希望对你有所帮助,我不记得具体如何使用它,但我认为这是一个很好的开始方式
您可以像这样使用 WebView
的 onError
事件:
//declarations and imports
state={isError:false}
render(){
return(
<WebView onError={()=>alert("Something went wrong")} />
)}
如果您想知道是否有互联网,请跟踪 onError
的错误。
您可以使用 React Native NetInfo 这是来自文档的示例:
NetInfo.isConnected.fetch().then(isConnected => {
console.log('First, is ' + (isConnected ? 'online' : 'offline'));
});
function handleFirstConnectivityChange(isConnected) {
console.log('Then, is ' + (isConnected ? 'online' : 'offline'));
NetInfo.isConnected.removeEventListener(
'connectionChange',
handleFirstConnectivityChange
);
}
NetInfo.isConnected.addEventListener(
'connectionChange',
handleFirstConnectivityChange
);
如果您想检查特定的 URL,您可以发送请求并更新状态
let req = await fetch('https://www.someurl.com'); 让 isConnected = req.status === 200;