首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >侦听webview操作以在RN中实现paystack

侦听webview操作以在RN中实现paystack
EN

Stack Overflow用户
提问于 2021-10-14 15:43:52
回答 1查看 151关注 0票数 0

我正在尝试运行一个webview内部的paystack,但是它有一个叫取消支付的按钮,不做任何事情。有人告诉我,这个按钮运行一个名为onClose的函数,该函数运行window.close,但由于它在work视图中,所以它不起作用。

现在,我正在尝试连接到该函数,理想情况下是创建一个导航操作,但现在只需要一个console.log或警报就足够了。

这是webview现在的样子。

代码语言:javascript
复制
<WebView 
      source={{ uri: authorization_url }}
      onNavigationStateChange={() => console.log('navstate changed')}
      cacheEnabled={false}
      cacheMode={'LOAD_NO_CACHE'}
      onMessage={(e) => {
          console.log('pressed')
          JSON.parse(e.nativeEvent?.data);
      }}
      onClose={() => {
        console.log('on close')
        navigation.navigate(callBackRoute)
      }}
    />

我想添加injectedJavaScript属性,但我不知道该放什么,到目前为止,我已经尝试了一堆东西,但都没有成功。

下面是payfast文档https://paystack.com/docs/guides/using_the_paystack_checkout_in_a_mobile_webview/的链接

更新:我用超时黑客解决了这个问题,我当然更希望找到一种方法来消除超时,并让它正常工作,但以下代码是有效的

代码语言:javascript
复制
const js = `
      setTimeout(function() {
      var buttons = document.getElementsByTagName('button')
      buttons.forEach((button) => {
        if(button.innerHTML.includes('Cancel Payment')) {
          button.addEventListener("click", function() {  
              var resp = {event:'cancelled'};
              window.ReactNativeWebView.postMessage(JSON.stringify(resp))
              });
        }
      })
    }, 3000);
      true; // note: this is required, or you'll sometimes get silent failures
    `

代码语言:javascript
复制
const onNavigationStateChange = state => {
    const { url } = state;
    webViewRef.current.injectJavaScript(js)
    // other navigationStateChangeCode
  }
EN

回答 1

Stack Overflow用户

发布于 2021-10-16 23:40:40

您可以尝试使用window.onload事件,该事件在文档加载完成后触发,而不是设置超时。

代码语言:javascript
复制
function onButtonClick() {
  var resp = {event:'cancelled'};
  window.ReactNativeWebView.postMessage(JSON.stringify(resp))
}

window.onload = function() {
  var buttons = document.getElementsByTagName('button');
  buttons.forEach((button) => {
    if(button.innerHTML.includes('Cancel Payment')) {
      button.addEventListener("click", onButtonClick);
    }
  })
}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69573629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档