react native 中android的webview没有拦截url请求的方式,想拦截什么办法比较好。

新手上路,请多包涵

问题描述

rn自带的webview ios提供了拦截请求的方法onShouldStartLoadWithRequest
但android并没有提供。请问如果想在js端做一些拦截的处理,什么办法比较好?

问题描述附加信息

需求是在js写一些业务逻辑,比如检测到网页url = my-company.com/login
那就拦截这个url请求,跳转到原生的登录页面。
等等.

目前的解决方案

目前是通过react native的native module封装一套自定义的webview 提供给rn js端使用。
原生封装拦截所有的url请求,发送通知消息给js。然后在js的事件监听里面做相应处理
若不需要拦截,调用原生自定义webview提供的自定义的loadUrl方法加载

原生封装核心代码:

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        Uri uri = Uri.parse(url);
        WritableMap eventData = createWebViewEvent(view, url);
        // 发送消息给js
        dispatchEvent(view, new shouldOverrideUrlLoadingEvent(view.getId(), eventData));
        return true;// return true 表示不请求。也就是拦截了所有url跳转。到js
    }
阅读 8.5k
2 个回答

onNavigationStateChange方法, 拿到的对象里有title, url, 符合条件跳回去就完了

新手上路,请多包涵

使用rn推荐的react-native-webview 5.0.8版本及以上,该WebView组件的onShouldStartLoadWithRequest已经支持android
image.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题