安卓与Vue交互—————WebView加载Vue App返回键的控制
2018-01-10 15:06
459 查看
相信很多安卓小伙伴都做过安卓调用JavaScript方法,或者JavaScript调用安卓方法,但是这一套如果搬到Vue-cli里面该怎么实现呢?今天主要用重写安卓返回键来控制Vue app路由这个例子来讲解。
首先为了让安卓能调用到JS的方法,我们需要把要被调用的方法挂载到window节点上面去,让安卓/IOS的webview能够找到这个方法:
首先创建一个JS文件:
然后再将这个JS文件挂载到Vue上去,找到main.js,将nativeJsBridge挂载上去:
然后就可以开始编写提供给移动端使用的JS方法了,在NativeJSBridge.js中编写:
window.back=function(){
history.go(-1)
}
下面在就是安卓干的事情了,附上安卓完整代码,其实就是重写返回键(onBackPress) java:
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.webkit.JavascriptInterface;
import android.webkit.ValueCallback;
import android.webkit.WebSettings;
import android.webkit.WebView;
public class MainActivity extends AppCompatActivity {
private WebView wv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
wv = (WebView) findViewById(R.id.wv);
WebSettings webSettings = wv.getSettings();
webSettings.setJavaScriptEnabled(true);
// "file:///android_asset/index.html"
wv.addJavascriptInterface(new JavaScriptInterface(), "android");
wv.loadUrl("http://192.168.1.179:8080");
}
private void androidJSBridge(String methodName) {
// Android版本变量
final int version = Build.VERSION.SDK_INT;
// 因为该方法在 Android 4.4 版本才可使用,所以使用时需进行版本判断
String url = "javascript:window." + methodName + "()";
if (version < 18) {
wv.loadUrl(url);
} else {
wv.evaluateJavascript(url, new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
//此处为 js 返回的结果
}
});
}
}
@Override
public void onBackPressed() {
// super.onBackPressed();
androidJSBridge("back");
}
public class JavaScriptInterface {
@JavascriptInterface
public void finish(String ssss) {
MainActivity.this.finish();
}
}
}
xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFF">
<WebView
android:id="@+id/wv"
android:layout_width="match_parent"
android:layout_height="match_parent"></WebView>
</RelativeLayout>
然后你发现返回键没法关闭APP了对不对。。。下回再讲。
首先为了让安卓能调用到JS的方法,我们需要把要被调用的方法挂载到window节点上面去,让安卓/IOS的webview能够找到这个方法:
首先创建一个JS文件:
然后再将这个JS文件挂载到Vue上去,找到main.js,将nativeJsBridge挂载上去:
然后就可以开始编写提供给移动端使用的JS方法了,在NativeJSBridge.js中编写:
window.back=function(){
history.go(-1)
}
下面在就是安卓干的事情了,附上安卓完整代码,其实就是重写返回键(onBackPress) java:
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.webkit.JavascriptInterface;
import android.webkit.ValueCallback;
import android.webkit.WebSettings;
import android.webkit.WebView;
public class MainActivity extends AppCompatActivity {
private WebView wv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
wv = (WebView) findViewById(R.id.wv);
WebSettings webSettings = wv.getSettings();
webSettings.setJavaScriptEnabled(true);
// "file:///android_asset/index.html"
wv.addJavascriptInterface(new JavaScriptInterface(), "android");
wv.loadUrl("http://192.168.1.179:8080");
}
private void androidJSBridge(String methodName) {
// Android版本变量
final int version = Build.VERSION.SDK_INT;
// 因为该方法在 Android 4.4 版本才可使用,所以使用时需进行版本判断
String url = "javascript:window." + methodName + "()";
if (version < 18) {
wv.loadUrl(url);
} else {
wv.evaluateJavascript(url, new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
//此处为 js 返回的结果
}
});
}
}
@Override
public void onBackPressed() {
// super.onBackPressed();
androidJSBridge("back");
}
public class JavaScriptInterface {
@JavascriptInterface
public void finish(String ssss) {
MainActivity.this.finish();
}
}
}
xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFF">
<WebView
android:id="@+id/wv"
android:layout_width="match_parent"
android:layout_height="match_parent"></WebView>
</RelativeLayout>
然后你发现返回键没法关闭APP了对不对。。。下回再讲。
相关文章推荐
- 安卓app的webView加载网页后出现ERR_UNKNOWN_URL_SCHEME
- Android中WebView加载Url时出现域名连接重定向时返回控制死循环的问题
- 背水一战 Windows 10 (63) - 控件(WebView): 基础知识, 加载 html, http, https, ms-appx-web:///, embedded resource, ms-appdata:///, ms-local-stream://
- 安卓获取webview加载的内容
- 背水一战 Windows 10 (64) - 控件(WebView): 加载指定 HttpMethod 的请求, 自定义请求的 http header, app 与 js 的交互
- webView 加载视频_控制不全屏
- 安卓的WebView不弹新窗口使用自有窗口加载及加载后执行javascript
- webview设置网页加载进度条和设置点击返回键
- Webview获取html的title信息,webview网络加载进度条,webview返回历史页
- 安卓开发, 遇到WebView不能加载静态网页, WebView显示 "net::ERR_PROXY_CONNECTON_FAILED"
- 关于webview加载网页,返回后总是刷新页面问题解决
- 安卓原生APP内嵌webview调试
- 安卓webview无法加载html页面
- webview 加载HTML控制图片的大小
- 在Fragment中重写返回键以及WebView加载重定向页面返回问题
- 安卓webview快速加载网页研究提速(一级加速)
- 安卓webView开发使用及加载html标签乱码处理
- WebView加载h5页面播放音乐或视频 返回,按锁屏键,按home键 播放不停止问题
- .Net语言 APP开发平台如何在webview中加载网页
- 安卓webView加载HTML数据