iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android WebView上实现JavaScript与Java交互
  • 684
分享到

Android WebView上实现JavaScript与Java交互

webviewJavaScriptAndroid 2022-06-06 08:06:44 684人浏览 泡泡鱼
摘要

其实WEBview加载资源的速度并不慢,但是如果资源多了,当然就很慢。图片、CSS 、js 、html这些资源每个大概需要10-200ms ,一般都是30ms就ok了。不过we

其实WEBview加载资源的速度并不慢,但是如果资源多了,当然就很慢。图片、CSSjshtml这些资源每个大概需要10-200ms ,一般都是30ms就ok了。不过webview是必须等到全部资源都完成加载,才会进行渲染的,所以加载的速度很重要!从Google上我们了解到,webview加载页面的顺序是:先加载html,然后从里面解析出css、js文件和页面上的图片资源进行加载。如果webkit的缓存里面有,就不加载。加载完这些资源之后,就进行css的渲染和js的执行。Css的渲染一般不需要很长时间,几十毫秒就ok。关键是js的执行,如果用了Jquery,则执行起来需要5-6秒。而在这段时间,如果不在webview里设置背景,网页部分是白色的,很难看。这是一个很糟糕的用户体验。所以#欧#柏泰#克建议如果用网页布局程序,最好别用那些庞大的js框架。最好使用原生的js写业务脚本,以提升加载速度,改善用户体验。

在混合开发中,有时会用到安卓原生SDK,如调用相机、查看相册、录音等,这就需要web页面中的javascript能调用到安卓SDK接口。由于Android的WebView是基于webkit内核的,集成了js与java互调的接口函数,可以方便地进行开发使用。

界面布局xml:


<RelativeLayout xmlns:android="Http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<WebView
android:id="@+id/webView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_above="@+id/linearLayout"
/>
<LinearLayout 
android:id="@+id/linearLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
>
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Java调用JavaScript接口"
>
</Button>
</LinearLayout>
</RelativeLayout> 

java代码:


private WebView webView;
private Handler handler = new Handler();
private Button button;
@SuppressLint("SetJavaScriptEnabled")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = (WebView) findViewById(R.id.webView);
//自定义webView设置
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webView.addJavascriptInterface(new MyJavaScriptInterface(MainActivity.this), "javaInterface");
//如果注释了,javaScript中的alert弹窗等就会失效,不显示
webView.setWebChromeClient(new WebChromeClient());
//webView.setWebChromeClient(new MyWebChromeClient());
//测试webView加载是否正常
//webView.loadUrl("http://www.baidu.com/");
webView.setWebViewClient(new HelloWebView());
webView.loadUrl("file:///android_asset/index.html");
button = (Button) findViewById(R.id.btn);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String param = "bb";
webView.loadUrl("javascript:showTitle('"+param+"')");
}
});
}
private class HelloWebView extends WebViewClient{
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// TODO Auto-generated method stub
view.loadUrl(url);
return true;
} 
}

public class MyJavaScriptInterface{
private Context context;
public MyJavaScriptInterface(Context context){
this.context = context;
}
@JavascriptInterface
public String toString() {
return "this is interface";
}
@JavascriptInterface
public void clickOnAndroid() {
Toast.makeText(context, "js调用安卓:....", Toast.LENGTH_SHORT).show();
}

@JavascriptInterface
public void call() {
Toast.makeText(context, "安卓客户端再调用JavaScript接口", Toast.LENGTH_SHORT).show();
handler.post(new Runnable() { 
@Override
public void run() {
String param = "bb";
webView.loadUrl("javascript:showTitle('"+param+"')");
}
});
}
}

其中:有几点必须注意的,网上早期关于WebView的描述中,有几点变化。1)安卓4.2以上的版本中使用WebView实现Java与Js互调,java接口需要声明@JavascriptInterface ; 2)WebView要调用setWebChromeClient(),以适应Js等弹窗等实现;3)addJavascriptInterface中绑定的接口中调用JavaScript接口,需要开启子线程来调用(报错:Caused by: java.lang.Throwable: A WebView method was called on thread 'JavaBridge'. All WebView methods must be called on the same thread. );

HTML代码:


<html>
<script type="text/javascript">
//安卓定义的接口1
function callAndroidInterface() {
window.javaInterface.clickOnAndroid();
}
//
function showTitle(param) {
alert("传参:"+param);
var x = document.getElementById("title");
alert("标题:"+x.innerHTML);
}
</script>
<body>
<h3 id="title">关于安卓与JavaScript的交互</h3>
<input type="button" value="调用接口1" onclick="callAndroidInterface()"></input> 
<input type="button" value="测试接口可用性" onclick="showTitle('aa')"></input> 
<input type="button" value="调用接口2" onclick="window.javaInterface.call()"></input>
</body>
</html> 

以上html文件,其中javaInterface就是webView中addJavacriptInterface()方法中注入的接口入口名称,通过该名称就可以直接调用Java中的接口。(该html页面需要保持到项目assets目录中,由webView.loadUrl("file:///android_asset/index.html")来加载);

效果图:

其中,对话框弹出:网址为"file://"的网页显示:,如果是服务器上的web页面就会显示源IP地址等等,显然不是我们想要的。下一篇,我们可以重写WebChromeClient来修改对话框、确认框等webView的优化

以上内容是针对Android WebView上实现JavaScript与Java交互的全部内容,希望对大家有所帮助!

您可能感兴趣的文章:android中webview控件和javascript交互实例Android中Java和JavaScript交互实例Android WebView使用方法详解 附js交互调用方法解析Android中webview和js之间的交互Android中WebView与Js交互的实现方法浅谈Android程序与JavaScript脚本的交互Android webview与js的数据交互Android中js和原生交互的示例代码android和js的交互之jsbridge使用教程


--结束END--

本文标题: Android WebView上实现JavaScript与Java交互

本文链接: https://www.lsjlt.com/news/25410.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Flutter webview与网页通讯交互实现
    目录前言预览具体实现flutter中使用ds_bridge网页端使用dsbridge_flutter总结前言 在app开发中我们有JSBridge来实现app和网页端通讯,现参考JS...
    99+
    2024-04-02
  • Android应用中怎么利用WebView与Javascript进行交互
    Android应用中怎么利用WebView与Javascript进行交互?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Android中可以使用WebView加载网页,同时And...
    99+
    2023-05-31
    android webview javascript
  • Android应用中的webview怎么与JavaScript进行数据交互
    本篇文章为大家展示了Android应用中的webview怎么与JavaScript进行数据交互,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。首先需要初始化WebView以及设置支持JavaScrip...
    99+
    2023-05-31
    webview javascript android
  • Android与H5交互 -- 点击H5跳转到 Android原生 页面 ,webview与h5(js)交互
    目录标题 Android与H5交互一、清单文件,增加的配置二、在你需要跳转的页面,清单文件中加入如下配置:三、整体结构布局如下 :四、贴一下html里面的代码吧五、具体实现如下: ...
    99+
    2023-09-17
    android studio
  • 基础巩固(五)Android通过WebView与Js交互
    文章目录 简介WebView基本使用常用方法WebView的生命周期 / 状态切换关于前进 / 后退网页清除缓存数据 常用类WebSettings类常见用法:设置WebView缓存 ...
    99+
    2023-09-02
    android javascript 交互
  • 微信小程序与webview H5交互怎么实现
    这篇文章主要介绍“微信小程序与webview H5交互怎么实现”,在日常操作中,相信很多人在微信小程序与webview H5交互怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”微信小...
    99+
    2023-07-04
  • JavaScript与HTML怎么实现交互
    这篇文章主要介绍“JavaScript与HTML怎么实现交互”,在日常操作中,相信很多人在JavaScript与HTML怎么实现交互问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解...
    99+
    2024-04-02
  • PHP与Javascript怎么实现交互
    PHP与Javascript怎么实现交互,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。PHP与Javascript交互的方法:通过Cookie交互。一共是三个文件,分别为:...
    99+
    2023-06-17
  • Flutter中实现交互式Webview的方法
    前言: Flutter是一款强大的跨平台移动应用开发框架,而Webview则是在应用中展示Web内容的重要组件。本文将介绍如何在Flutter应用中实现交互式的Webview,以便为用户提供更加丰...
    99+
    2023-09-10
    flutter
  • Naive与WebView在Android中怎么实现互相调用
    本篇文章为大家展示了Naive与WebView在Android中怎么实现互相调用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Android  Naive与WebView的互相调用详解An...
    99+
    2023-05-31
    android naive webview
  • QT与javascript交互数据的实现
    一、数据从QT流向JS 1、QT调用JS的函数,JS通过形参获得QT的值 2、JS调用QT的函数,QT函数的返回值进入JS 二、数据从JS流向QT 1、JS调用QT的函数,QT通过形...
    99+
    2024-04-02
  • QT与javascript交互数据如何实现
    这篇文章给大家分享的是有关QT与javascript交互数据如何实现的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、数据从QT流向JS1、QT调用JS的函数,JS通过形参获得QT的值2、JS调用QT的函数,QT...
    99+
    2023-06-15
  • Android中WebView与H5前端JS代码交互的示例分析
    这篇文章主要为大家展示了“Android中WebView与H5前端JS代码交互的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Android中WebView与H5前端JS代码交互的示例分...
    99+
    2023-05-30
    android webview html5
  • PHP学习之实现PHP与JavaScript的交互(二)
    PHP与JavaScript交互的详细介绍 了解JavaScript什么是JavaScriptJavaScript的功能 JavaScript语言基础JavaScript数据类型JavaS...
    99+
    2023-09-16
    javascript php 交互 前端 html
  • Flex与JavaScript中怎么实现交互中调用
    今天就跟大家聊聊有关Flex与JavaScript中怎么实现交互中调用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、在JavaScript中调用Flex方法在Flex中可以用Ex...
    99+
    2023-06-17
  • golang与pgsql交互的实现
    目录1、目的2、代码架构3、代码展示1、目的 通过读取配置文件获取pgsql用户名和密码及数据库和数据表,从而读取所需字段值。 2、代码架构 config/config.go:读取...
    99+
    2023-03-19
    golang pgsql交互 golang pgsql
  • flutter开发实战-inappwebview实现flutter与Javascript的交互JSBridge
    flutter开发实战-inappwebview实现flutter与Javascript的交互JSBridge 在使用webview中,需要实现flutter与Javascript交互,在使用webv...
    99+
    2023-10-12
    flutter javascript 交互 inappwebview HTML5 JSBridge webview
  • javascript能实现交互功能吗
    随着互联网的发展,越来越多的网站和应用都需要实现交互功能,这些交互功能往往需要使用到JavaScript语言。虽然在Web开发领域中,JavaScript早已成为一个非常流行的编程语言,但是对于一些新手开发者或者没有接触过JavaScrip...
    99+
    2023-05-21
  • JavaScript怎么实现前后端交互
    这篇文章主要介绍“JavaScript怎么实现前后端交互”,在日常操作中,相信很多人在JavaScript怎么实现前后端交互问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Ja...
    99+
    2024-04-02
  • golang与pgsql交互如何实现
    本文小编为大家详细介绍“golang与pgsql交互如何实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“golang与pgsql交互如何实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1、目的通过读取配置文...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作