Android  Naive与WebView的互相调用详解

Android  Naive与WebView的互相调用详解

Android的Naive程序是可以嵌套WebView,并且可以做到与WebView的交互,一般来说有两种方法,一是直接交互,比如,Naive直接调用WebView的方法和WebView直接调用Naive的方法。二是WebView可以写<a/>超链接标签,然后用户点击此标签时,Naive可以拦截到点击标签的事件,这样,我们可以在链接上做一套自己的协议,然后Android和iOS可以根据此协议做出相同的处理,做到多平台统一。

我们先研究一下Naive和WebView如何相互调用。

    初始化:

mWebView = (WebView) findViewById(R.id.main_wv);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.loadUrl("file:///android_asset/demo.html");
//第一个为交给WebView来进行控制的对象,第二个为控制的对象的变量名,即JS得到此对象后,在为此对象赋名,就可以进行控制了。
mWebView.addJavascriptInterface(this, "naive");

1、Naive直接调用JS方法:

下面为html中的JS方法  :

function alert(){
document.getElementById("title").innerHTML = "Naive调用Js无参方法";
}

naive进行调用,方式为调用WebView的loadUrl方法,方法中传递一个String,格式为'javascript:'+'方法名'+'(变量)'

public void onJs(View view) {
    mWebView.loadUrl("javascript:alert()");
}

有参数JS方法:

function alertWith(arg){
document.getElementById("title").innerHTML = arg;
}

naive进行有参JS调用:

public void onJsWith(View view) {
    mWebView.loadUrl("javascript:alertWith('Naive调用Js有参方法')");
}

2、JS调用naive:

本地先写好要被调用的方法,注意前面需要加上注解@JavascriptInterface

@JavascriptInterface
public void toast() {
Toast.makeText(this, "JS调用了Naive的无参方法", Toast.LENGTH_SHORT).show();
}

JS调用的代码:

<input type="button" value="点击调用naive代码" onclick="window.naive.toast()"/>

本地写好有参的要被调用的方法:

@JavascriptInterface
public void toastWith(String toast) {
Toast.makeText(this, toast, Toast.LENGTH_SHORT).show();
}

        js调用有参的代码:

<input type="button" value="点击调用naive代码并传递参数"
    onclick="window.naive.toastWith('JS调用了Naive的有参代码')"/> 

下面将Activity的源代码贴出来;

public class MainActivity extends AppCompatActivity { 

  private WebView mWebView; 

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main); 

    mWebView = (WebView) findViewById(R.id.main_wv);
    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.addJavascriptInterface(this, "naive");
    mWebView.loadUrl("file:///android_asset/demo.html"); 

  } 

  public void onJs(View view) {
    mWebView.loadUrl("javascript:alert()");
  } 

  public void onJsWith(View view) {
    mWebView.loadUrl("javascript:alertWith('Naive调用Js有参方法')");
  } 

  @JavascriptInterface
  public void toast() {
    Toast.makeText(this, "JS调用了Naive的无参方法", Toast.LENGTH_SHORT).show();
  } 

  @JavascriptInterface
  public void toastWith(String toast) {
    Toast.makeText(this, toast, Toast.LENGTH_SHORT).show();
  } 

}

下面为HTML的代码:

<html>
<head>
  <meta http-equiv="Content-Type" content="text/html;charset=gb2312">
  <script type="text/javascript">
    function alert(){
       document.getElementById("title").innerHTML = "Naive调用Js无参方法";
    }
    function alertWith(arg){
       document.getElementById("title").innerHTML = arg;
    } 

  </script>
</head>
<body>
<h1 id="title"></h1><br/>
<input type="button" value="点击调用naive代码" onclick="window.naive.toast()"/><br/>
<input type="button" value="点击调用naive代码并传递参数"
    onclick="window.naive.toastWith('JS调用了Naive的有参代码')"/>
</body>
</html>

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • Android在WebView中调用系统下载的方法

    前言 最近发现项目中的WebView加载下载页的时候是一片空白,没有出现下载,于是简单的调用了系统的下载对其进行下载. 过程 自定义一个下载监听,实现了DownloadListener这个接口 class MyDownloadStart implements DownloadListener{ @Override public void onDownloadStart(String url, String userAgent, String contentDisposition, String

  • Android WebView调用本地相册的方法

    本文实例为大家分享了Android WebView调用本地相册的具体实现方法,供大家参考,具体内容如下 首先要知道android本身的WebView是并不支持调用手机文件并上传的,其次WebView的内核在android每次更新的时候都是不太一样的,也是够坑爹的:不过需求又不能改,H5需要调用系统相册,还好最后还是找到方法解决了,就是要重写里面的一个方法,不过这种情况也是在5.0之前有效,5.0之后就需要重写另外的一个方法,先将这些方法一个个的列出 注意在这里我们需要重写的方法是在这个WebCh

  • Android Naive与WebView的互相调用详解

    Android  Naive与WebView的互相调用详解 Android的Naive程序是可以嵌套WebView,并且可以做到与WebView的交互,一般来说有两种方法,一是直接交互,比如,Naive直接调用WebView的方法和WebView直接调用Naive的方法.二是WebView可以写<a/>超链接标签,然后用户点击此标签时,Naive可以拦截到点击标签的事件,这样,我们可以在链接上做一套自己的协议,然后Android和iOS可以根据此协议做出相同的处理,做到多平台统一. 我们先研究

  • Android  Naive与WebView的互相调用详解

    Android  Naive与WebView的互相调用详解 Android的Naive程序是可以嵌套WebView,并且可以做到与WebView的交互,一般来说有两种方法,一是直接交互,比如,Naive直接调用WebView的方法和WebView直接调用Naive的方法.二是WebView可以写<a/>超链接标签,然后用户点击此标签时,Naive可以拦截到点击标签的事件,这样,我们可以在链接上做一套自己的协议,然后Android和iOS可以根据此协议做出相同的处理,做到多平台统一. 我们先研究

  • 关于Android Webview 设置Cookie问题详解

    最近遇到一个比较坑爹的问题就是webview里添加第三方H5页面,但是数据获取不到,经过一天的折磨发现cookie值每次都会变,再根据谷歌开发者模式定位,cookie每次应该都是固定,每次变化说明本地的cookie有问题,或者为空. webview有一个CookieManager这个类,他是专门管理cookie的,这个类可以设置一个或多个cookie,而且当你在里面设置好cookie以后接口会自动根据你设置时的url来使用. 一共有两种获取cookie的方法一种是HttpURLConnectio

  • Android 拦截返回键事件的实例详解

    Android 拦截返回键事件的实例详解 KeyEvent类 Android.View.KeyEvent类中定义了一系列的常量和方法,用来描述Android中的 按键事件和返回键有关的常量和方法有. KeyEvent.KEYCODE_BACK: 表示key类型为返回键 KeyEvent.ACTION_DOWN:表示事件为按下key,如果一直按住不放,则会不停产生此事件. KeyEvent.ACTION_UP:表示事件为为放开key,一次点击key过程只会调用一次. public final in

  • Android 中Fragment与Activity通讯的详解

    Android 中Fragment与Activity通讯的详解 与activity通讯 尽管fragment的实现是独立于activity的,可以被用于多个activity,但是每个activity所包含的是同一个fragment的不同的实例. Fragment可以调用getActivity()方法很容易的得到它所在的activity的对象,然后就可以查找activity中的控件们(findViewById()). 例如: ViewlistView =getActivity().findView

  • Android Activity的跳转与传值详解

    Android Activity的跳转与传值详解 Activity跳转与传值,主要是通过Intent类来连接多个Activity,以及传递数据. Intent是Android一个很重要的类.Intent直译是"意图",什么是意图呢?比如你想从这个Activity跳转到另外一个Activity,这就是一个意图.Intent类在Android系统中的作用很大,在此不详细说了,后面有文章介绍! Activity跳转,无返回结果 这是最简单的Activity跳转方式.从一个Activity启动

  • Android屏幕及view的截图实例详解

    Android屏幕及view的截图实例详解 屏幕可见区域的截图 整个屏幕截图的话可以用View view = getWindow().getDecorView(); public static Bitmap getNormalViewScreenshot(View view) { view.setDrawingCacheEnabled(true); view.buildDrawingCache(); return view.getDrawingCache(); } scrollview的整体截屏

  • Android RecyclerView添加头部和底部实例详解

    Android RecyclerView添加头部和底部实例详解 如果只是想添加头部,可是使用GitHub里面这个项目,它可以为LinearLayoutManager,GridLayoutManager ,StaggeredGridLayoutManager布局的RecyclerView添加header.使用起来也十分简单: 只需将RecyclerViewHeader布局放在RecyclerView的上层. <FrameLayout android:layout_width="match_p

  • Android 两种启动模式的实例详解

    Android 两种启动模式的实例详解 Intent的FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_REORDER_TO_FRONT Activity的两种启动模式:FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_REORDER_TO_FRONT 1. 如果已经启动了四个Activity:A,B,C和D.在D Activity里,我们要跳到B Activity,同时希望C finish掉,可以在startActivity(intent)里

  • Android OkHttp的简单使用和封装详解

    Android OkHttp的简单使用和封装详解 1,昨天把okHttp仔细的看了一下,以前都是调用同事封装好了的网络框架,直接使用很容易,但自己封装却不是那么简单,还好,今天就来自我救赎一把,就和大家写写从最基础的OKHttp的简单get.post的使用,再到它的封装. 2,OkHttp的简单使用 首先我们创建一个工程,并在布局文件中添加三个控件,TextView(用于展示获取到json后的信息).Button(点击开始请求网络).ProgressBar(网络加载提示框) ①简单的异步Get请

随机推荐