问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

android嵌入h5,怎么交互

发布网友 发布时间:2022-04-23 01:14

我来回答

1个回答

热心网友 时间:2022-04-20 03:28

Android和H5之间的交互
hybrid App开发也不是什么新鲜事了,其中native和h5之间的交互则是必不可少的。Android中是如何和H5交互的?
1、webView加载页面
我们都知道在Android中是通过webView来加载html页面的,根据HTML文件所在的位置不同写法也不同:
//例如:加载assets文件夹下的test.html页面
mWebView.loadUrl("file:///android_asset/test.html")
//例如:加载网页
mWebView.loadUrl("http://www.baidu.com")

如果只是这样调用mWebView.loadUrl()加载的话,那么当你点击页面中的链接时,页面将会在你手机默认的浏览器上打开。那如果想要页面在App内中打开的话,那么就得设置setWebViewClient:
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
mWebView.loadUrl(url);
return true;
}
}
});

2、Android本地通过Java调用HTML页面中的JavaScript方法
想要调用js方法那么就必须让webView支持
WebSettings webSettings = mWebView.getSettings();
//设置为可调用js方法
webSettings.setJavaScriptEnabled(true);

若调用的js方法没有返回值,则直接可以调用mWebView.loadUrl("JavaScript:do()");其中do是js中的方法;若有返回值时我们可以调用mWebView.evaluateJavascript()方法:
mWebView.evaluateJavascript("sum(1,2)", new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
Log.e(TAG, "onReceiveValue value=" + value);
}
});

js代码如下:
<script type="text/javascript">
function sum(a,b){
return a+b;
}
function do(){
document.getElementById("p").innerHTML="hello world";
}
</script>

2、js调用Android本地Java方法
在Android4.2以上可以直接使用@JavascriptInterface注解来声明,下面是在一个本地Java方法
public class JsInteration {
@JavascriptInterface
public String back() {
return "hello world";
}
}

定义完这个方法后再调用mWebView.addJavascriptInterface()方法:
mWebView.addJavascriptInterface(new JsInteration(), "android");

那么在js中怎么来调用呢?
<script type="text/javascript">
function s(){
//调用Java的back()方法
var result =window.android.back();
document.getElementById("p").innerHTML=result;
}

</script>

4、拦截HTML页面中的点击事件
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//判断url拦截事件
if (url.equals("file:///android_asset/test2.html")) {
Log.e(TAG, "shouldOverrideUrlLoading: " + url);
startActivity(new Intent(MainActivity.this,Main2Activity.class));
return true;
} else {
mWebView.loadUrl(url);
return false;
}
}
});

以上就是Java调用js方法以及js调用Java方法的实现交互方式中的一种。下面给出完整代码:
mainActivity
public class MainActivity extends AppCompatActivity {
public static final String TAG = "MainActivity";
private WebView mWebView;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mWebView = (WebView) findViewById(R.id.webView);
mWebView.loadUrl("file:///android_asset/test.html");
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
mWebView.addJavascriptInterface(new JsInteration(), "android");
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.equals("file:///android_asset/test2.html")) {
Log.e(TAG, "shouldOverrideUrlLoading: " + url);
startActivity(new Intent(MainActivity.this,Main2Activity.class));
return true;
} else {
mWebView.loadUrl(url);
return false;
}
}
});
}
//Android调用有返回值js方法
@TargetApi(Build.VERSION_CODES.KITKAT)
public void onClick(View v) {

mWebView.evaluateJavascript("sum(1,2)", new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
Log.e(TAG, "onReceiveValue value=" + value);
}
});
}
public class JsInteration {

@JavascriptInterface
public String back() {
return "hello world";
}
}
}

test.html
<!DOCTYPE html>
<html>
<head>
<title></title>
<script type="text/javascript">
function sum(a,b){
return a+b;
}
function s(){
var result =window.android.back();
document.getElementById("p").innerHTML=result;
}

</script>
</head>
<body>
<button onclick="s()">调用本地方法</button>
<a href="file:///android_asset/test2.html">点击</a>
<p id="p"></p>
</body>
</html>
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
车架影响寿命 美的空调要接什么电源线 甲床短了还能长出来吗怎么把甲床养长 超实用的居家清洁时间表 学会帮你节省一半时间 陕西慕马暖通科技有限公司怎么样? 杭州壹墨建筑规划设计有限公司怎么样? 广州市美都清洁服务有限公司怎么样? 嘉兴亿杰建设有限公司怎么样? Excel/Word表格中如何实现整行的上移/下移、整列的左移/右移? 解读松下洗衣机H59故障代码的原因和解决方法故障代码H59 h5能不能运行安卓原生代码? 如何用H5来开发安卓手机App软件 如何用HTML5开发安卓应用 H5app 有办法在安卓机中开机启动吗 安卓手机打开H5页面滑动不够流畅 而且加载数据滑着滑着会回滚怎么回事... h5怎么打开android app 安卓系统H5点开为什么没有声音 家庭自制蛋糕需要哪些材料,比例是多少 在家制作奶油蛋糕(材料最好家里有的,常见的) 怎么做蛋糕?用一些家里平常有的东西。。。不要太难哦~~~ 家里简单的做蛋糕的方法? 怎样用普通家庭有的材料做蛋糕 腾讯洛克王国是什么? 怎么玩? 怎样在家里做蛋糕?需要哪些材料? 家庭制作生日蛋糕的方法?超市能买到的材料!请告诉一下具体怎么制作 如何把歌导入库乐队? 洛克王国目前谁最厉害? 如何用家里的简单材料制作蛋糕? 如何把歌导入库乐队设置铃声 库乐队怎么打开本地音乐 h5页面怎么针对安卓和苹果开发 如何在H5页面里调用手机导航? H5写的app在安卓终端机上如何自启动 H5页面如何实现自动识别IOS或安卓,如果是IOS就自动跳转到苹果应用商店... 上海地铁门上方的SOS按钮是做什么的? 用H5开发的APP可以在安卓平台和APP store中上架吗 上海街头人行道红绿灯控制按钮 到底有没有用啊? androd H5混合开发 当无网络下,android怎么加载H5界面 上海三利按钮制造有限公司怎么样? 快速下载并安装广东移动手机营业厅app且供立刻使用(如何正确使广东移动手机营业厅app)? 上海松江手报按钮电话灯常亮什么意思? 上海通用专业行车记录仪上的按钮用途是什么? 苹果手机怎样下载广东移动掌上营业厅App? 上海大众朗逸车内按钮怎么亮啊,晚上开车看不到按钮很不方便啊 历史化学地理可以报考的专业有哪些? 广东移动手机营业厅APP怎样下载?ID是什么我都不知道。 上海通用电梯外招按钮要按俩次才能呼到电梯 广东移动APP在什么地方下载? 选化史地组合有好的专业可以选吗 正泰按钮lay39和上海双科按钮开关LAY50一样的吗
  • 焦点

最新推荐

猜你喜欢

热门推荐