首页 > 其他分享 >WebView初探

WebView初探

时间:2023-07-31 22:04:17浏览次数:40  
标签:void javascript mWebView 初探 new WebView public


WebView初探 了解到WebView的强大,。听说WebView对Javascript的支持也很强,想从网上找些例子,还很难找,最终从google老家找了一个Java和Javascript互调的例子 ,当时看了,下巴“咣当”就掉在地上了,太强了!这样也行?
整个Eclipse ADT工程例子中都有,这里重点分析一下代码:



Java代码

WebView初探_android


1. public class WebViewDemo extends Activity {   
2.    private WebView mWebView;   
3.    private Handler mHandler = new Handler();   
4.  
5.    public void onCreate(Bundle icicle) {   
6.        super.onCreate(icicle);   
7.        setContentView(R.layout.webviewdemo);   
8.        mWebView = (WebView) findViewById(R.id.webview);   
9.        WebSettings webSettings = mWebView.getSettings();   
10.        webSettings.setJavaScriptEnabled(true);   
11.        mWebView.addJavascriptInterface(new Object() {   
12.            public void clickOnAndroid() {   
13.                mHandler.post(new Runnable() {   
14.                    public void run() {   
15.                        mWebView.loadUrl("javascript:wave()");   
16.                    }   
17.                });   
18.            }   
19.        }, "demo");   
20.        mWebView.loadUrl("file:///android_asset/demo.html");   
21.    }   
22. }  
 
 
public class WebViewDemo extends Activity {
        private WebView mWebView;
        private Handler mHandler = new Handler();

        public void onCreate(Bundle icicle) {
                super.onCreate(icicle);
                setContentView(R.layout.webviewdemo);
                mWebView = (WebView) findViewById(R.id.webview);
                WebSettings webSettings = mWebView.getSettings();
                webSettings.setJavaScriptEnabled(true);
                mWebView.addJavascriptInterface(new Object() {
                        public void clickOnAndroid() {
                                mHandler.post(new Runnable() {
                                        public void run() {
                                                mWebView.loadUrl("javascript:wave()");
                                        }
                                });
                        }
                }, "demo");
                mWebView.loadUrl("file:///android_asset/demo.html");
        }
}


这里的重点是addJavascriptInterface(Object obj,String interfaceName)方法,该方法将一个java对象绑定到一个javascript对象中,javascript对象名就是interfaceName,作用域是Global。这样初始化webview后,在webview加载的页面中就可以直接通过javascript:window.demo访问到绑定的java对象了。来看看在html中是怎样调用的:



Html代码

WebView初探_android

 
   
 
  
1. <html>  
2.        <script language="javascript">  
3.                function wave() {   
4.                    document.getElementByIdx("droid").src="android_waving.png";   
5.                }   
6.        </script>  
7.        <body>  
8.            <a onClick="window.demo.clickOnAndroid()">  
9.                                <img id="droid" src="android_normal.png"/><br>  
10.                                Click me!   
11.            </a>  
12.        </body>  
13. </html>  
 
 
<html>
        <script language="javascript">
                function wave() {
                    document.getElementByIdx("droid").src="android_waving.png";
                }
        </script>
        <body>
            <a onClick="window.demo.clickOnAndroid()">
                                <img id="droid" src="android_normal.png"/><br>
                                Click me!
            </a>
        </body>
</html>



这样在javascript中就可以调用java对象的clickOnAndroid()方法了,wave()方法是java中调用javascript的例子。

这里还有几个知识点:

1)为了让WebView从apk文件中加载assets,Android SDK提供了一个schema,前缀为"file:///android_asset/"。WebView遇到这样的schema,就去当前包中的assets目录中找内容。如上面的"file:///android_asset/demo.html"

2)addJavascriptInterface方法中要绑定的Java对象及方法要运行另外的线程中,不能运行在构造他的线程中,这也是使用Handler的目的。

标签:void,javascript,mWebView,初探,new,WebView,public
From: https://blog.51cto.com/u_3124497/6913755

相关文章

  • 第16章 进程管理与SELinux初探
    第16章进程管理与SELinux初探一个程序被加载到内在当中运作,那么在内存中的那个数据就被称为进程(process)。进程是操作系统上非常重要的概念,所有系统上面跑的数据都会以进程的形态存在。16.1什么是进程(process)在Linux系统中:触发任何一个事件时,系统都会将他定义成为一个......
  • 概率图模型(PGM):贝叶斯网(Bayesian network)初探
    概率图模型(PGM):贝叶斯网(Bayesiannetwork)初探1.从贝叶斯方法(思想)说起-我对世界的看法随世界变化而随时变化用一句话概括贝叶斯方法创始人ThomasBayes的观点就是:任何时候,我对世界总有一个主观的先验判断,但是这个判断会随着世界的真实变化而随机修正,我对世......
  • 条件随机场(conditional random field,CRF)模型初探
    条件随机场(conditionalrandomfield,CRF)模型初探1.条件随机场,一种特殊的概率图模型结构我们知道,从图结构角度来说,概率图模型可以分为以下两种:基于有向图的贝叶斯网:具备有向依赖性基于无向图的马尔科夫网:具备无向依赖性条件随机场是一个在变量子集上存在有......
  • 基于Python的HTTP代理爬虫开发初探
     在数字化时代,网络数据的获取对于企业和个人都变得至关重要。然而,许多网站为了保护其数据和资源,采取了反爬虫措施,使得我们无法直接访问和获取所需的信息。这时,HTTP代理爬虫就成为了一项强大的工具,它可以帮助我们绕过限制,有效地进行数据采集。在本文中,将介绍基于Python的HTTP代理......
  • 改造冰蝎对抗waf&OpenRASP计划-初探
     0x01前言在参考了各家waf对于多种姿势检测“冰蝎”的文章之后,产生了改造冰蝎的想法,目前主要的检测手段为针对冰蝎的流量特征进行匹配,所以我们的反侦探手段为改变冰蝎的流量特征以达到绕过的目的,由于@rebeyond大佬没有开源冰蝎代码,所以得反编译。那么思路来了,第一:反编译冰蝎,得到......
  • 智能指针初探
    智能指针是C++11引入的,比裸指针更为强大的指针。主要作用是用来完成一定程度上的内存资源管理自动化。unique_ptrunique_ptr实现专属所有权功能。unique_ptr不允许拷贝,只允许移动,保证了没有其他的指针指向unique_ptr指向的对象。unique_ptr被析构时,其析构函数会主动析构所指向的......
  • unity打开内置网页(UniWebView插件)
    UniWebView支持IOS和安卓,window不行UniWebView5|网络|UnityAssetStore安卓demo场景打包就能用,IOS可能得改下配置url必须加协议前缀http://、https:// ......
  • mitmproxy初探(windows版以及linux版)
    mitmproxy简介mitmproxy是一组工具,包括:mitmproxy(交互式的,具有控制台界面,但不支持windows)mitmweb(基于web的图形化界面)mitmdump(命令行版本)win10安装mitmproxy查阅了官方文档以及各位大佬博客,基本上都是在python环境下安装的,但是python版本好像要高于3.6,我就试了一下直接用pip......
  • vuE初探[230704]
    vue语法初探课前须知知识储备:html、JavaScript、css(node、npm、webpack)课程介绍进阶式:基础:生命周期函数条件循环渲染指令、页面样式修饰语法···组件:全局&局部、数据传递、插槽基础···动画:单组件元素、列表&状态动画、CSS和JS动画···高级扩展语法:Mixin混入、V......
  • Cocos Creator开发之MVC模式初探
    设计模式是用来实现软件设计进行分工的。设计模式应该是小巧的,对具体问题提出解决方案,以提高代码复用率,提高代码耦合性。CocosCreator中引入MVC模式的主要目的是:为了帮助CocosCreator开发者脱离拖拽脚本导致的后期维护方面带来的困难。一、基本的MVC模式组成控制器(Controller)-负......