共计 1047 个字符,预计需要花费 3 分钟才能阅读完成。
原生调用 Web 端代码
WebView 是 Native 中加载网页的一个控件,该组件提供一个 evaluateJavascript() 办法运行 JS 代码。咱们要做的是在 Native 端执行一个 js 办法,在 Web 端进行监听。
Web 端定义方法
window.doit=function(data){console.log(data);
};
原生调用
webView.evaluateJavascript("window.doit(' 来自原生的数据 ')", null);
Web 端调用原生代码
当 Web 端要申请 Native 端的办法时,咱们首先要自定义一个 URL Schema,向 Native 端发动一个申请,最初在 Native 端的 WebView 进行监听。
URL schema 介绍
URL schema 是类 URL 的申请格局,如:<protocol>://<domain>/<path>?<query>
Web 端发送 URL schema 申请
比方咱们能够通过批改一个暗藏的 iframe 地址来实现发送申请:
<iframe src="jsbridge://showToast?text= 来自 Web 端端数据"></iframe>
舒适提醒:失常来说是能够通过 window.location.href 达到发动网络申请的成果的,然而有一个很重大的问题,就是如果咱们间断屡次批改 window.location.href 的值,在 Native 层只能接管到最初一次申请,后面的申请都会被疏忽掉。所以 JS 端发动网络申请的时候,须要应用 iframe,这样就能够防止这个问题。
原生实现监听
安卓
在 Android 中 (WebViewClient 里),通过 shouldoverrideurlloading 能够捕捉到 url scheme 的触发:
private WebViewClient webViewClient = new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url){
// 读取到 url 后自行进行剖析解决
// 如果返回 false,则 WebView 解决链接 url,如果返回 true,代表 WebView 依据程序来执行 url
return true;
}
}
舒适提醒:另外,Web 中也能够不通过 iframe.src 来触发 scheme,通过 window.prompt(uri, “”); 来触发 scheme,而后原生中通过重写 WebViewClient 的 onJsPrompt 来获取 uri。
正文完