问题描述
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
}
onNavigationStateChange方法, 拿到的对象里有title, url, 符合条件跳回去就完了