在 Webview React Native 中接受确认
Accept confirm in Webview React Native
我有一个 React Native 应用程序(带有 expo),它有一个 Webview,我使用它和 injectedJavascript 来完成登录并做一些事情。
事情是在一个部分,有一个确认对话框,我需要接受然后继续 JS。
我有这样的东西:
const sendDataFromReactNativeToWebView = async () => {
await new Promise(() => setTimeout(() => createAlert(), 4000));
let injectedData = `document.querySelector("#login-user").value= "test";`;
viewRef.injectJavaScript(injectedData);
await new Promise((resolve) => setTimeout(resolve, 500));
injectedData = `document.querySelector("#login-password").value= "test123";`;
viewRef.injectJavaScript(injectedData);
await new Promise((resolve) => setTimeout(resolve, 500));
injectedData = `document.getElementById("pc-login-btn").click();`;
viewRef.injectJavaScript(injectedData);
//here I've a confirm that I need to accept
await new Promise((resolve) => setTimeout(resolve, 15000));
injectedData = `document.querySelector("#menuTree > li:nth-child(2) > a").click();`;
viewRef.injectJavaScript(injectedData);
};
return (
<>
<View style={styles.container}>
<Image source={logo} />
<Text style={styles.baseText}>
Test <Text style={styles.innerText}>
</Text>
</Text>
<View style={{ margin: 10 }}></View>
<Button
title="Test me"
onPress={() => sendDataFromReactNativeToWebView()}
/>
<StatusBar style="auto" />
</View>
<View style={styles.web}>
<SafeAreaView style={{ flex: 1 }}>
<TouchableOpacity onPress={() => setSeeWebView(false)}>
<Text>Close x</Text>
</TouchableOpacity>
<WebView
style={{ flex: 1 }}
source={{ uri: "http://www.someurl.com" }}
javaScriptEnabledAndroid={true}
ref={(webView) => (viewRef = webView)}
/>
</SafeAreaView>
</View>
</>
);
}
webview
中有一个 onMessage
也许我可以使用但不知道如何使用。
有什么想法吗?
问得好。
我认为你可以使用
function confirm() {
return true;
}
如果在每次 confirm() 发生之前执行它,至少它会起作用。
我有一个 React Native 应用程序(带有 expo),它有一个 Webview,我使用它和 injectedJavascript 来完成登录并做一些事情。
事情是在一个部分,有一个确认对话框,我需要接受然后继续 JS。
我有这样的东西:
const sendDataFromReactNativeToWebView = async () => {
await new Promise(() => setTimeout(() => createAlert(), 4000));
let injectedData = `document.querySelector("#login-user").value= "test";`;
viewRef.injectJavaScript(injectedData);
await new Promise((resolve) => setTimeout(resolve, 500));
injectedData = `document.querySelector("#login-password").value= "test123";`;
viewRef.injectJavaScript(injectedData);
await new Promise((resolve) => setTimeout(resolve, 500));
injectedData = `document.getElementById("pc-login-btn").click();`;
viewRef.injectJavaScript(injectedData);
//here I've a confirm that I need to accept
await new Promise((resolve) => setTimeout(resolve, 15000));
injectedData = `document.querySelector("#menuTree > li:nth-child(2) > a").click();`;
viewRef.injectJavaScript(injectedData);
};
return (
<>
<View style={styles.container}>
<Image source={logo} />
<Text style={styles.baseText}>
Test <Text style={styles.innerText}>
</Text>
</Text>
<View style={{ margin: 10 }}></View>
<Button
title="Test me"
onPress={() => sendDataFromReactNativeToWebView()}
/>
<StatusBar style="auto" />
</View>
<View style={styles.web}>
<SafeAreaView style={{ flex: 1 }}>
<TouchableOpacity onPress={() => setSeeWebView(false)}>
<Text>Close x</Text>
</TouchableOpacity>
<WebView
style={{ flex: 1 }}
source={{ uri: "http://www.someurl.com" }}
javaScriptEnabledAndroid={true}
ref={(webView) => (viewRef = webView)}
/>
</SafeAreaView>
</View>
</>
);
}
webview
中有一个 onMessage
也许我可以使用但不知道如何使用。
有什么想法吗?
问得好。 我认为你可以使用
function confirm() {
return true;
}
如果在每次 confirm() 发生之前执行它,至少它会起作用。