windowsuw7玩创世联盟卡怎么办

android软件开发之webView.addJavascriptInterface循环渐进【二】 - sollyu - 博客园
本篇文章由:
android软件开发之webView.addJavascriptInterface循环渐进【一】:
android软件开发之webView.addJavascriptInterface循环渐进【二】:
上一篇文章发布之后,得到了大家的一致好评,在文章中答应出的第二篇也一直一直没有出来,今天就补出来。OK话不多,咱明直接开始,因为的文章写的时间已经过早,已经没有办法还原原工程,所以我这里就新建了一个工程。
为了让大家更容易的理解,所以我这里就尽量的将代码缩短,这是我的工程的配置
创建好工程之后,然后将界面调整为下面这样
首先将两个button和webview添加进来,并给web添加两个JavaScript调用接口,testFunc1和testFunc2
private Button
m_testButtom1;
private Button
m_testButtom2;
private WebView m_WebView;
@SuppressLint(&SetJavaScriptEnabled&)
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
m_testButtom1 = (Button)findViewById(R.id.button1);
m_testButtom2 = (Button)findViewById(R.id.button2);
m_WebView = (WebView)findViewById(R.id.webView1);
m_WebView.getSettings().setJavaScriptEnabled(true);
m_WebView.addJavascriptInterface(new Object(){
@SuppressWarnings(&unused&)
// 这两个函数可以在JavaScript中调用
public void testFunc1(String string) {messageHandler.obtainMessage(MessageHandler.WM_SET_FUNC1, string).sendToTarget(); }
@SuppressWarnings(&unused&)
public void testFunc2(String string) { messageHandler.obtainMessage(MessageHandler.WM_SET_FUNC2, string).sendToTarget();}
}, &demo&);
m_WebView.loadUrl(&file: ///android_asset/demo.html&);
可以看到里面用到了一个messageHandler,我们看一下他具体的定义,这个类主要就是用来JavaScript交互的,JavaScript会使用这个消息来和我们的UI进行交互,同样也有说过
Looper looper = Looper.myLooper(); //得到当前线程的Looper实例,由于当前线程是UI线程也可以通过Looper.getMainLooper()得到
private Handler messageHandler = new MessageHandler(looper);//此处甚至可以不需要设置Looper,因为 Handler默认就使用当前线程的Looper
public class MessageHandler extends Handler {
public static final int WM_SET_FUNC1 = 0;
public static final int WM_SET_FUNC2 = 1;
public MessageHandler(Looper looper) { super(looper); }
public void handleMessage(Message msg) {
switch (msg.what) {
case WM_SET_FUNC1:
Toast.makeText(getApplicationContext(), msg.obj.toString(), Toast.LENGTH_LONG).show();
case WM_SET_FUNC2:
Toast.makeText(getApplicationContext(), msg.obj.toString(), Toast.LENGTH_LONG).show();
添加完成之后,在来添加按钮点击事件
m_testButtom1.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
String string = &&;
m_WebView.loadUrl(&javascript:testFunc1('&+string+&');&);
// 调用html中的JavaScript函数testFunc1,这里只有一个参数
m_testButtom2.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
String string = &这里有两个参数:&;
int nInt = ;
m_WebView.loadUrl(&javascript:testFunc2('&+string+&',&+String.valueOf(nInt)+&)&); // 通用这里有2个参数
这样在Android的代码就算写完了,下面在来看一下demo.html
demo.html源代码为:
&script language=&javascript&&
function testFunc1(var1)
return_var = &原创文章:& + var1;
window.demo.testFunc1(return_var);
// 调用Android代码中的 testFunc1 的函数
return return_
function testFunc2(var1,var2)
return_var = var1 + var2;
window.demo.testFunc2(return_var);
// 这里的参数就为返回到android的值
return return_
阅读(...) 评论()android webView中addJavascriptInterface方法 - ITeye问答
android中通过addJavascriptInterface可以使js访问java中的对象。
如: mWebView.addJavascriptInterface(new DemoJavaObj(), "demo");在js中可以直接用demo去方法 DemoJavaObj中的方法,可是当不在需要改demo对象时,怎么移除或清空mWebView中的所有接口么?&
目前还没有答案
已解决问题
未解决问题android addJavascriptInterface 不能生效 解决办法
android addJavascriptInterface 不能生效 解决办法
发布时间: 20:50:04
编辑:www.fx114.net
本篇文章主要介绍了"android addJavascriptInterface 不能生效 解决办法 ",主要涉及到android addJavascriptInterface 不能生效 解决办法 方面的内容,对于android addJavascriptInterface 不能生效 解决办法 感兴趣的同学可以参考一下。
一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!
二、互相尊重,对自己的言论和行为负责。
本文标题:
本页链接:帮助企业打造成功软件!
热门搜索:
Android:如何使用addJavaScriptInterface
Android:如何使用addJavaScriptInterface
| 作者: |
09:30:13| 阅读 0次
概述:addJavaScriptInterface是一个非常有用的功能,帮助我们从一个网页传递值到Android XML视图(反之亦然)。
本文将和大家分享中的 addJavaScriptInterface方式。这个类主要能帮助调用你的函数中的任意活动方式。其中有如下一些需要注意的地方:
addJavaScriptInterface方式帮助我们从一个网页传递值到Android XML视图(反之亦然)。
你可以从网页调用你的活动类方式(反之亦然)。
这是一个非常有用的功能,而当WebView中的是不能信赖的,这则是一个非常危险的安全问题,因为攻击者可以注入HTML执行你的代码。
除非WebView所有HTML都是你写的,否则不要使用addJavascriptInterface()。
本文包含如下要点:
执行JavaScriptInterface及其方式。
使用该界面,我们将绑定一个textview(文本视图)控制。
demo app的源代码。
我们将用到一个Eclipse ID,创建一个命名为JavaScriptInterfaceDemo的新项目。创建之后,即添加user permission for internet(用户互联网权限)到 AndroidManifest.xml文件中。
&ltuses-permission android:name="android.permission.INTERNET"/>
然后创建一个命名为www的文件夹,之后在该文件夹内创建一个index.html文件。我们已经在名为main.xml的布局文件使用WebView 和textview。main.xml代码如下:
&lt?xml version="1.0" encoding="utf-8"?>
&ltLinearLayout xmlns:android="/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
&ltWebView
android:id="@+id/webView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1" />
&ltLinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:layout_weight="1">
&ltTextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:textAppearance="?android:attr/textAppearanceLarge" />
&lt/LinearLayout>
&lt/LinearLayout>
在main.xml文件中,我们已经用到一个父布局,它是一个线性布局,如果没有它,我会用一些子控制和布局。
现在我们将写更多行到JavaScriptInterfaceDemoActivity.java类。代码如下:
package my.
import my.demo.R;
import android.app.A
import android.content.C
import android.os.B
import android.os.H
import android.webkit.WebV
import android.widget.TextV
import android.widget.T
public class JavaScriptInterfaceDemoActivity extends Activity {
private WebView Wv;
private TextView myTextV
final Handler myHandler = new Handler();
/** Called when the activity is first created. */
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 mC
JavaScriptInterface(Context c) {
mContext =
public void showToast(String webMessage){
final String msgeToast = webM
myHandler.post(new Runnable() {
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实例。
在JavaScriptInterface类初始化之后,添加一行到OnCreate方式。
final JavaScriptInterface myJavaScriptInterface = new JavaScriptInterface(this);
webview提供addJavascriptInterface方式。该方式包含两项参数:
绑定到JavaScript的类实例。
用来显示JavaScript中的实例的名称。
对于webview,我们需要弟阿勇一些设置来启用JavaScript。
Wv.addJavascriptInterface(myJavaScriptInterface, "AndroidFunction");
最后,需要在webview中提供一个web URL:
Wv.loadUrl("file:///android_asset/www/index.html");
然后创建一个命名为index.html的HTML文件。该HTML有一个文本框和一个提交按钮。HTML文件代码如下:
&lt!DOCTYPE >
&lthtml xmlns="http://www.w3.org/1999/xhtml" debug="true">
&ltmeta http-equiv="Content-Type" content="text/ charset=utf-8" />
&ltmeta name="viewport"
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
&ltmeta name="apple-mobile-web-app-capable" content="yes">
&ltmeta name="viewport" content="target-densitydpi=device-dpi" />
&ltscript type="text/javascript">
function init()
var testVal = document.getElementById('mytextId').
AndroidFunction.showToast(testVal);
&lt/script>
&ltdiv style="float:width: 50%;">
&ltinput type="text" style="width: 180"
name="myText" id="mytextId" />
&ltdiv style="clear:height: 3"> &lt/div>
&ltinput value="submit" type="button" name="submit"
id="btnSubmit" onclick="javascript:return init();" />
该HTML文件有一个JavaScript函数名为init,该函数调用活动方式。
AndroidFunction.showToast(testVal);
AndroidFunction是同样的名字,用来显示JavaScript中的实例。我们已经在addJavascriptInterface方式中给出该名字。
现在运行你的app。
慧都控件|提供软件技术整体解决方案
云集全球三千余款优秀控件、软件产品,提供行业领先的咨询、培训与开发服务
企业QQ:|电话:023-
服务与支持
重庆 / 023-
北京 / 010-
400-700-1020
慧都旗下网站
慧都科技有限公司 版权所有 Copyright
渝ICP备号 |
京公网安备 19号
100%正版软件
400-700-1020
<input type="hidden" id="url" value=""/>

我要回帖

更多关于 windows 的文章

 

随机推荐