Javascript WebView:函数内部发生更改的WebViewRef问题
我对WebView组件有问题。我想在这个webview中注入JavaScript,并从这个网站获取数据。多亏了webview,我不得不继续浏览网页。一旦网站加载完毕,用户必须点击“获取数据”按钮,因此我注入javascript以检查我必须点击获取数据的网站。一旦javascript发现了这个问题,我就通过javascript点击链接,并在链接页面上获取所需的数据。因此,WebViewRef在我的函数中发生了变化(因为我正在从一个页面移动到另一个页面),我认为这就是问题所在。因为当我第二次尝试注入Javascript(Javascript WebView:函数内部发生更改的WebViewRef问题,javascript,webview,Javascript,Webview,我对WebView组件有问题。我想在这个webview中注入JavaScript,并从这个网站获取数据。多亏了webview,我不得不继续浏览网页。一旦网站加载完毕,用户必须点击“获取数据”按钮,因此我注入javascript以检查我必须点击获取数据的网站。一旦javascript发现了这个问题,我就通过javascript点击链接,并在链接页面上获取所需的数据。因此,WebViewRef在我的函数中发生了变化(因为我正在从一个页面移动到另一个页面),我认为这就是问题所在。因为当我第二次尝试注入
WebViewRef.injectJavascript(cmd[1])
)时,我收到以下错误消息:[未处理的承诺拒绝:TypeError:null不是对象(评估WebViewRef.injectJavascript)]
。我不知道如何在同一个函数中使用新的WebviewRef。我不知道这是否是一个很好的解释,但以下是我在组件渲染返回中的内容(我不向您展示所有函数,因为我认为解决问题不需要它):
(WebViewRef=r)}
onNavigationStateChange={uOnNavigationStateChange.bind(this)}
renderLoading={()=>}
startInLoadingState={true}
javaScriptEnabled={true}
来源={{
uri:this.state.uri,
}}
样式={{高度:600,边距:50}
onMessage={(事件)=>{
this.setState({message:event.nativeEvent.data});
}}
/>
{
WebViewRef.injectJavaScript(cmd[0])
等待新的承诺((resolve)=>setTimeout(function(){console.log(“下一步”);resolve()},3000))
WebViewRef.JavaScript(cmd[1])
}}
/>
某些精度:
\u onNavigationStateChange
是一个函数,它接受新的uri并将其放在this.state.uri中,允许我轻松更改webviewwait new Promise(..)
是一种等待网站完全加载的安全方法。我正在等待webview已更改为注入我的javascriptcmd
是我想在webview中注入的javascript代码数组谢谢大家 我正在使用React Native为Android和苹果操作系统编写应用程序。
<View style={{ flex: 1 }}>
<ScrollView>
<WebView
ref={(r) => (WebViewRef = r)}
onNavigationStateChange={_onNavigationStateChange.bind(this)}
renderLoading={() => <ActivityIndicator size="large" color="red" />}
startInLoadingState={true}
javaScriptEnabled={true}
source={{
uri: this.state.uri,
}}
style={{ height: 600, marginRight: 50 }}
onMessage={(event) => {
this.setState({ message: event.nativeEvent.data });
}}
/>
</ScrollView>
<View style={styles.buttonView}>
<Button
title="Get Data"
buttonStyle={styles.button}
containerStyle={styles.buttonContainer}
onPress={async () => {
WebViewRef.injectJavaScript(cmd[0])
await new Promise((resolve) => setTimeout(function(){console.log("Next Step"); resolve()}, 3000))
WebViewRef.injectJavaScript(cmd[1])
}}
/>
</View>
</View>