Javascript WebView:函数内部发生更改的WebViewRef问题

Javascript WebView:函数内部发生更改的WebViewRef问题,javascript,webview,Javascript,Webview,我对WebView组件有问题。我想在这个webview中注入JavaScript,并从这个网站获取数据。多亏了webview,我不得不继续浏览网页。一旦网站加载完毕,用户必须点击“获取数据”按钮,因此我注入javascript以检查我必须点击获取数据的网站。一旦javascript发现了这个问题,我就通过javascript点击链接,并在链接页面上获取所需的数据。因此,WebViewRef在我的函数中发生了变化(因为我正在从一个页面移动到另一个页面),我认为这就是问题所在。因为当我第二次尝试注入

我对WebView组件有问题。我想在这个webview中注入JavaScript,并从这个网站获取数据。多亏了webview,我不得不继续浏览网页。一旦网站加载完毕,用户必须点击“获取数据”按钮,因此我注入javascript以检查我必须点击获取数据的网站。一旦javascript发现了这个问题,我就通过javascript点击链接,并在链接页面上获取所需的数据。因此,WebViewRef在我的函数中发生了变化(因为我正在从一个页面移动到另一个页面),我认为这就是问题所在。因为当我第二次尝试注入Javascript(
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中,允许我轻松更改webview
  • wait new Promise(..)
    是一种等待网站完全加载的安全方法。我正在等待webview已更改为注入我的javascript
  • var
    cmd
    是我想在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>