javascript - 如何从我的 WebView 中触发反应原生的动作?
问题描述
我有一个组件<PaymentView />
,这个组件显示一个信用卡/cvc/到期表格。
它显示在使用react-native-webview
.
我必须触发表单事件并在提交时更新视图,提交按钮当前位于 WebView 中。
- 从 webview 中按下提交
<Button />
后,如何关闭 WebView 并显示成功消息? - 如果我无法从我的组件中获取 webview 提交事件,我如何从我的组件中读取 webview 中的表单?
解决方案
在处理 Web 应用程序中的支付 iframe 时,我通常会遇到这个问题。我认为解决方案是相同或相似的方法。
检查postMessage API。
我们通常做的是在 iFrame(我猜是你的 webView)端发出一个事件。通常是一个导航事件,然后我们在我们的应用程序中全局监听该事件,例如:
<script>
var defaultResponse = {
status: 0,
code: '',
message: ''
}
function queryParamsToObject(search = '') {
return search ? JSON.parse('{"' + search.replace(/&/g, '","').replace(/=/g, '":"') + '"}') : ''
}
function getResponseObject() {
return queryParamsToObject(decodeURI(location.search).substring(1))
}
var response = getResponseObject()
console.log('window:child', window.parent, response)
try {
window.parent.postMessage(response, '*')
} catch (e) {
console.log('window:child:send:error', e)
}
</script>
在快速搜索时,react-native-webview
我发现他们已经在使用它
希望能帮助到你
推荐阅读
- sql-server - SSMS SQL 以与 Excel VBA 不同的用户身份运行
- java - java中的推广
- node.js - 自适应卡上的 Action.Submit 不会调用下一步(仅在 Microsoft Teams 中有效,在网络聊天中有效):Bot Framework V4
- tensorflow - AssertionError:labels.txt 和 cfg/yolov2.cfg 表示的类号不一致
- android - 如何在 android 的首选项中从工具中获取值(使用 androidAnnotations)
- firebase - 尝试获取 Firestore 数据库实例时出现 NoClassDefFoundError
- android - 如何获取 FragmentPagerAdapter 中的当前项目?
- azure - 每当运行操作时,Azure Artifact 源都会导致“从缓存中获取时完整性不正确”
- graphql-dotnet - GraphQL .NET:单例模式的中间件问题
- postgresql - PostgreSQL for Debian vs Redhat (Centos)