好吧,我分两步做:Native 代码向 JS 部分发送请求,然后 JS 向 Native 发送回数据。
为此,您必须在 Native 中组织一些 JS 接口并将其添加到您的“onCreate”中。不是很复杂。这是代码:
JS接口:
public class JavaScriptInterface {
Context mContext;
private GoogleApiClient client;
public JavaScriptInterface(Context c) {
mContext = c;
}
@JavascriptInterface
public void getDataFromJs(String divData){
//here is your code
}
}
现在您可以像这样将它添加到“onCreate”中:
public class MainActivity extends AppCompatActivity {
public static WebView view;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String url = "http://website.com";
view = (WebView) this.findViewById(R.id.webView);
view.getSettings().setJavaScriptEnabled(true);
view.setWebChromeClient(new WebChromeClient());
view.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
view.getSettings().setBlockNetworkImage(false);
view.getSettings().setAllowFileAccess(true);
view.getSettings().setAllowFileAccessFromFileURLs(true);
view.getSettings().setAllowUniversalAccessFromFileURLs(true);
view.addJavascriptInterface(new JavaScriptInterface(this), "Android");
view.loadUrl(url);
}
}
这里我们为 JavaScriptInterface 命名为 Android。
然后在 Native 中向 JS 添加一些发送请求(或数据)的函数是合乎逻辑的(您必须在“onCreate”之后将其添加到 MainActivity 类):
public static String sendToJS(final String inStr, final String address) {
final String sendStr = String.format("javascript:%s('%s')", address, inStr.toString());
String response = "";
try {
view.post(new Runnable() {
@Override
public void run() {
view.loadUrl(sendStr);
}
});
response = sendStr;
}catch(Exception e){
response = e.getMessage();
}
return response;
}
在 JS 中寻址函数:
function myFunction(inData){
//your code cares about inData if you need it
var outData = document.getElementById("test").innerHTML;
Android.getDataFromJs(outData );
}
最后的用法(来自 Native):
sendToJS("yourStringData", "myFunction");
您在“getDataFromJs”方法中的 JavaScriptInterface 中得到的答案。
对你有帮助吗?