Android:如何使用addJavaScriptInterface

Android:如何使用addJavaScriptInterface

2023年7月7日发(作者:)

Android:如何使⽤addJavaScriptInterface说明本⽂将和⼤家分享中的 addJavaScriptInterface⽅式。这个类主要能帮助调⽤你的函数中的任意活动⽅式。其中有如下⼀些需要注意的地⽅:addJavaScriptInterface⽅式帮助我们从⼀个⽹页传递值到Android XML视图(反之亦然)。你可以从⽹页调⽤你的活动类⽅式(反之亦然)。这是⼀个⾮常有⽤的功能,⽽当WebView中的是不能信赖的,这则是⼀个⾮常危险的安全问题,因为攻击者可以注⼊HTML执⾏你的代码。除⾮WebView所有HTML都是你写的,否则不要使⽤addJavascriptInterface()。本⽂包含如下要点:执⾏JavaScriptInterface及其⽅式。使⽤该界⾯,我们将绑定⼀个textview(⽂本视图)控制。demo app的源代码。使⽤代码我们将⽤到⼀个Eclipse ID,创建⼀个命名为JavaScriptInterfaceDemo的新项⽬。创建之后,即添加user permission for internet(⽤户互联⽹权限)到 ⽂件中。然后创建⼀个命名为www的⽂件夹,之后在该⽂件夹内创建⼀个⽂件。我们已经在名为的布局⽂件使⽤WebView 和textview。代码如下:

android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:layout_weight="1">

android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="match_parent"

android:textAppearance="?android:attr/textAppearanceLarge" /> 在⽂件中,我们已经⽤到⼀个⽗布局,它是⼀个线性布局,如果没有它,我会⽤⼀些⼦控制和布局。现在我们将写更多⾏到类。代码如下:package ;import .R;import ty;import t;import ;import r;import w;import ew;import ;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) { te(savedInstanceState);

setContentView(); Wv = (WebView)findViewById(w1); myTextView = (TextView)findViewById(ew1);

final JavaScriptInterface myJavaScriptInterface = new JavaScriptInterface(this);

tings().setLightTouchEnabled(true); tings().setJavaScriptEnabled(true); ascriptInterface(myJavaScriptInterface, "AndroidFunction"); l("file:///android_asset/www/");

}

public class JavaScriptInterface { Context mContext; JavaScriptInterface(Context c) { mContext = c; }

public void showToast(String webMessage){

final String msgeToast = webMessage;

(new Runnable() { @Override public void run() { // This gets executed on the UI thread so it can safely modify Views t(msgeToast); } }); xt(mContext, webMessage, _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⽅式。ascriptInterface(myJavaScriptInterface, "AndroidFunction");webview提供addJavascriptInterface⽅式。该⽅式包含两项参数:绑定到JavaScript的类实例。⽤来显⽰JavaScript中的实例的名称。对于webview,我们需要弟阿勇⼀些设置来启⽤JavaScript。tings().setJavaScriptEnabled(true);最后,需要在webview中提供⼀个web URL:l("file:///android_asset/www/");然后创建⼀个命名为的HTML⽂件。该HTML有⼀个⽂本框和⼀个提交按钮。HTML⽂件代码如下:

content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">

name="myText" id="mytextId" />

id="btnSubmit" onclick="javascript:return init();" />

该HTML⽂件有⼀个JavaScript函数名为init,该函数调⽤活动⽅式。ast(testVal);AndroidFunction是同样的名字,⽤来显⽰JavaScript中的实例。我们已经在addJavascriptInterface⽅式中给出该名字。现在运⾏你的app。

发布者:admin,转转请注明出处:http://www.yc00.com/web/1688673466a161483.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信