博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android:如何使用addJavaScriptInterface
阅读量:5985 次
发布时间:2019-06-20

本文共 3810 字,大约阅读时间需要 12 分钟。

说明

本文将和大家分享中的 addJavaScriptInterface方式。这个类主要能帮助调用你的函数中的任意活动方式。其中有如下一些需要注意的地方:

  • addJavaScriptInterface方式帮助我们从一个网页传递值到Android XML视图(反之亦然)。
  • 你可以从网页调用你的活动类方式(反之亦然)。
  • 这是一个非常有用的功能,而当WebView中的是不能信赖的,这则是一个非常危险的安全问题,因为攻击者可以注入HTML执行你的代码。
  • 除非WebView所有HTML都是你写的,否则不要使用addJavascriptInterface()。

本文包含如下要点:

  • 执行JavaScriptInterface及其方式。
  • 使用该界面,我们将绑定一个textview(文本视图)控制。
  • demo app的源代码。

使用代码

我们将用到一个Eclipse ID,创建一个命名为JavaScriptInterfaceDemo的新项目。创建之后,即添加user permission for internet(用户互联网权限)到 AndroidManifest.xml文件中。

然后创建一个命名为www的文件夹,之后在该文件夹内创建一个index.html文件。我们已经在名为main.xml的布局文件使用WebView 和textview。main.xml代码如下:

在main.xml文件中,我们已经用到一个父布局,它是一个线性布局,如果没有它,我会用一些子控制和布局。

现在我们将写更多行到JavaScriptInterfaceDemoActivity.java类。代码如下:

package my.demo;import my.demo.R;import android.app.Activity;import android.content.Context;import android.os.Bundle;import android.os.Handler;import android.webkit.WebView;import android.widget.TextView;import android.widget.Toast;public class JavaScriptInterfaceDemoActivity extends Activity {    private WebView Wv;    private TextView myTextView;        final Handler myHandler = new Handler();        /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);               setContentView(R.layout.main);        Wv = (WebView)findViewById(R.id.webView1);        myTextView = (TextView)findViewById(R.id.textView1);                final JavaScriptInterface myJavaScriptInterface         = new JavaScriptInterface(this);                          Wv.getSettings().setLightTouchEnabled(true);        Wv.getSettings().setJavaScriptEnabled(true);        Wv.addJavascriptInterface(myJavaScriptInterface, "AndroidFunction");        Wv.loadUrl("file:///android_asset/www/index.html");     }        public class JavaScriptInterface {        Context mContext;        JavaScriptInterface(Context c) {            mContext = c;        }                public void showToast(String webMessage){                        final String msgeToast = webMessage;                         myHandler.post(new Runnable() {                 @Override                 public void run() {                     // This gets executed on the UI thread so it can safely modify Views                     myTextView.setText(msgeToast);                 }             });           Toast.makeText(mContext, webMessage, Toast.LENGTH_SHORT).show();        }    }}

在Java类文件中,我们已经将一些代码写入到oncreate方式。在这个方式中,我们用findViewById方式找到webview 和textview控制。然后创建一个JavaScriptInterface类。该类有一个构建函数,该函数初始化Context类。那么,什么是Context类呢?

Context类是一个抽象类,它允许访问特定应用资源和类,以及调用应用程序级操作,诸如发起活动、广播和接收意图等。

在构建函数初始化后,创建一个名为showToast的方式,该方式有一个变量的msgeToast字符串,然后创建一个名为myHandler的Handler(处理器)。该处理器有一个Post方式,在该方式的声明中,创建一个新的可运行线程类的实例,在这个类里覆盖一个运行方式,该运行方式设置textview控制的值。

现在在OnCreate方式中创建一个JavaScriptInterface实例。

final JavaScriptInterface myJavaScriptInterface = new JavaScriptInterface(this);

在JavaScriptInterface类初始化之后,添加一行到OnCreate方式。

Wv.addJavascriptInterface(myJavaScriptInterface, "AndroidFunction");

webview提供addJavascriptInterface方式。该方式包含两项参数:

  • 绑定到JavaScript的类实例。
  • 用来显示JavaScript中的实例的名称。

对于webview,我们需要弟阿勇一些设置来启用JavaScript。

Wv.getSettings().setJavaScriptEnabled(true);

最后,需要在webview中提供一个web URL:

Wv.loadUrl("file:///android_asset/www/index.html");

然后创建一个命名为index.html的HTML文件。该HTML有一个文本框和一个提交按钮。HTML文件代码如下:

            

该HTML文件有一个JavaScript函数名为init,该函数调用活动方式。

AndroidFunction.showToast(testVal);

AndroidFunction是同样的名字,用来显示JavaScript中的实例。我们已经在addJavascriptInterface方式中给出该名字。

现在运行你的app。

android,addJavaScriptInterface

转载于:https://www.cnblogs.com/elegant-dancer/p/3417431.html

你可能感兴趣的文章
采石厂管理系统V3.0版本上线(采石厂车辆出入管理系统,石厂开票系统)
查看>>
uint8_t / uint16_t / uint32_t /uint64_t 的简单介绍
查看>>
给数组扩容的几种方式
查看>>
游标之数据排序
查看>>
【转】Delphi的"Invalid pointer operation"异常的解决办法
查看>>
HMM与分词、词性标注、命名实体识别
查看>>
LeetCode: Reverse Words in a String 解题报告
查看>>
自定义窗体设计器-控件测试
查看>>
ORA-02266: unique/primary keys in table referenced by enabled foreign keys
查看>>
日常煎药注意事项
查看>>
Spring MVC 和 Spring 总结
查看>>
Asp.net通用的应用程序缓存方法
查看>>
MOSS2010使用PDF电子表单(Livecycle design ES 8.2.1)
查看>>
阿里技术嘉年华官网上线啦!
查看>>
IOS 小技巧
查看>>
uva 11027 Palindromic Permutation
查看>>
hdu 4063 Aircraft(计算几何+最短路)
查看>>
我在互联网的第一年
查看>>
用GDB调试程序(一)
查看>>
Android架构分析之Android消息处理机制(二)
查看>>