首页 > 编程知识 正文

android与js传参(安卓页面传参)

时间:2023-12-22 11:30:27 阅读:318918 作者:ZLXD

本文目录一览:

如何在JAVASCRIPT调用Android JAVA函数

首先是网页:

%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%  

!DOCTYPE HTML  

html  

head  

meta http-equiv="Content-Type" content="text/html; charset=UTF-8"  

titlejs和android相互调用/title  

head  

  

script type="text/javascript" language="javascript"  

    //调用java方法jsCallJava()  

    function showHtmlcallJava() {  

        var str = window.android.jsCallJava();  

        document.getElementById("info1").value = str;  

    }  

  

    //调用java方法jsCallJavaWithParams(String var),带参数  

    function showHtmlcallJava2() {  

        var str = window.android.jsCallJavaWithParams("Devin Chen");  

        document.getElementById("info2").value = str;  

    }  

  

    //提供给java调用的方法  

    function show() {  

        document.getElementById("id_input").value = "Java调用Html中的方法";  

    }  

  

    //提供给java调用的方法,带参数  

    function showWithParam(param) {  

        document.getElementById("id_input2").value = "Java调用Html中的方法: " + param;  

    }  

/script  

/head  

  

body  

    input id="info1" style="width: 90%" type="text" value="null" /br  

    input type="button" value="Html调用Java方法" onclick="showHtmlcallJava()" /br  

    input id="info2" style="width: 90%" type="text" value="null" /br  

    input type="button" value="Html调用带参数的Java方法" onclick="showHtmlcallJava2()" /br  

    input id="id_input" style="width: 90%" type="text" value="null" /br  

    input type="button" value="Java调用Html方法" onclick="window.android.javaCallJavaScript()" /br  

    input id="id_input2" style="width: 90%" type="text" value="null" /br  

    input type="button" value="Java调用带参数的Html方法" onclick="window.android.javaCallJavaScriptWithParams()" /  

/body  

/html

Android部分的布局就一个WebView,MainActivity源代码:

/** 

 * java方法和javascript方法的相互调用 

 */  

public class MainActivity extends AppCompatActivity {  

    private static final String url = "";  

    private WebView mWebView;  

  

    @Override  

    protected void onCreate(Bundle savedInstanceState) {  

        super.onCreate(savedInstanceState);  

        setContentView(R.layout.activity_main);  

        initView();  

    }  

  

    private void initView() {  

        mWebView = (WebView) findViewById(R.id.web_main);  

        WebSettings settings = mWebView.getSettings();  

        settings.setJavaScriptEnabled(true);  

        settings.setDefaultTextEncodingName("utf-8");  

        mWebView.loadUrl(url);  

        mWebView.setWebViewClient(new WebViewClient());  

        //这两句是必须的,"android"就是jsp中调用方法时window后面的对象  

        Object obj = getObject();  

        mWebView.addJavascriptInterface(obj, "android");  

    }  

  

    private Object getObject() {  

  

        Object obj = new Object() {  

            /** 

             * html中的JavaScript调用Java方法 

             * 注解是必须的 

             * @return 

             */  

            @JavascriptInterface  

            public String jsCallJava() {  

                return "JavaScript调用Java方法";  

            }  

  

            /** 

             * html中的JavaScript调用带参数的Java方法 

             * 注解是必须的 

             * @return 

             */  

            @JavascriptInterface  

            public String jsCallJavaWithParams(String var) {  

                return "JavaScript调用带参数的Java方法" + var;  

            }  

  

            /** 

             * java调用html中的方法,遗憾的是不知道有什么办法可以拿到返回值 

             */  

            @JavascriptInterface  

            public void javaCallJavaScript() {  

                runOnUiThread(new Runnable() {  

                    @Override  

                    public void run() {  

                        mWebView.loadUrl("javascript:show()");  

  

                    }  

                });  

            }  

  

            /** 

             * java调用html中的方法,并且传递参数,这个有大用 

             */  

            @JavascriptInterface  

            public void javaCallJavaScriptWithParams() {  

                runOnUiThread(new Runnable() {  

                    @Override  

                    public void run() {  

                        mWebView.loadUrl("javascript:showWithParam('baoge')");  

                    }  

                });  

            }  

  

        };  

        return obj;  

    }  

}

安卓和javascript交互必须通过webView吗?可以用安卓的其他控件调用js吗?还有他们能通过volley交互吗?

您好,很高兴能帮助您,Android中webview和js之间的交互1.android中利用webview调用网页上的js代码。Android 中可以通过webview来实现和js的交互,在程序中调用js代码,只需要将webview控件的支持js的属性设置为true,,然后通过loadUrl就可以直接进行调用,如下所示:mWebView.getSettings().setJavaScriptEnabled(true);mWebView.loadUrl("javascript:test()");2. 网页上调用android中java代码的方法在网页中调用java代码,需要在webview控件中添加javascriptInterface。如下所示:mWebView.addJavascriptInterface(new Object() { public void clickOnAndroid() { mHandler.post(new Runnable() { public void run() { Toast.makeText(Test.this, "测试调用java", Toast.LENGTH_LONG).show();} }); } }, "demo");在网页中,只需要像调用js方法一样,进行调用就可以div id='b'a onclick="window.demo.clickOnAndroid()"b.c/a/div3. Java代码调用js并传参首先需要带参数的js函数,如function test(str),然后只需在调用js时传入参数即可,如下所示:mWebView.loadUrl("javascript:test('aa')");4.Js中调用java函数并传参首先一样需要带参数的函数形式,但需注意此处的参数需要final类型,即得到以后不可修改,如果需要修改其中的值,可以先设置中间变量,然后进行修改。如下所示:mWebView.addJavascriptInterface(new Object() { public void clickOnAndroid(final int i) { mHandler.post(new Runnable() { public void run() { int j = i;j++;Toast.makeText(Test.this, "测试调用java" + String.valueOf(j), Toast.LENGTH_LONG).show();}});} }, "demo");然后在html页面中,利用如下代码div id='b'a onclick="window.demo.clickOnAndroid(2)"b.c/a/div,即可实现调用你的采纳是我前进的动力,还有不懂的地方,请你继续“追问”!如你还有别的问题,可另外向我求助;答题不易,互相理解,互相帮助!

js给android传参数怎么写

webview中js调用本地java方法,这个功能实现起来稍微有点麻烦,不过也不怎么复杂,首先要对webview绑定javascriptInterface,js脚本通过这个接口来调用java代码。 contentWebView.addJavascriptInterface(this, "wst"); javainterface实际就是

安卓与js交互时怎样给js端传递数据

alert(document.getElementById('ha').innerHTML); 如果里面是b点击/b,得到的也是b点击/b.或alert(document.getElementById('ha').innerText); // 这个仅IE下有效,但如果里面是b点击/b,得到的只是"点击"

android中webview与js交互

移动开发中,我们经常会遇到混合开发模式,经常是在移动客户端中增加网页,来减少客户端的压力,同时也让软件更加灵活。废话少说,下面直接进入主题。

webView.getSettings().setAppCachePath(getCacheDir().getAbsolutePath());

webView.getSettings().setAppCacheEnabled(true);

if (Constant.DEBUG) {

webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);

}

if (Build.VERSION.SDK_INT = Build.VERSION_CODES.LOLLIPOP) {

webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);

}

//参数1 定义Android 与js交互的接口, 参数2 与js交互的一个常量,可以是任意一个常量字符串,

但是h5网页调用的时候需要增加这个参数二:handler

public class JSInterface{

@JavascriptInterface//这个标注必须加上 表示js要调用的方法,可以自动识别

public void getShareInfo(String strings) {

//todo android dosomething

}

}

那么 js端该如何调用这个方法呢

android 和ios的调用方法不一样 因此 h5里面需要区别andorid和ios机型来分别调用移动端方法

如android:

//handler 是与android 约定的常量(最好做成全局通用的常量)

//getShareInfo 是与android 定义的调用方法

以上常量、方法、参数类型 必须一致才能成功调用

WebView提供两个事件回调类给应用层,分别为WebViewClient,WebChromeClient开发者可以继承

这两个类,接手相应事件处理。WebViewClient 主要提供网页加载各个阶段的通知,比如网页开始

加载onPageStarted,网页结束加载onPageFinished等;WebChromeClient主要提供网页加载过程

中提供的数据内容,比如返回网页的title,favicon等。

有需要监听加载网页进度

//需要webBar的可以自定义增加一个webBar

最后,就是大家都知道的webView.loadUrl(url);//url需要加载的网页

那么,如何在android调用js的方法呢

//getMsg() 为js里面暴露的方法

在销毁的时候:

protected void onDestroy() {

super.onDestroy();

if (webView != null) {

webView.loadUrl("about:blank");

webView.destory();

}

}

在Android上怎样实现JAVA和JS交互

android调用js方法比较简单,一行代码搞定。

mWebView.loadUrl("javascript:test('" + aa+ "')");//test就是你js方法,然后是参数

然后是js调用android方法,比较复杂。

a onclick="window.wst.test2(2)"b.c/a

这个window.wst的wst就是Android中自己定义的标识名称,clickOnAndroid方法就是安卓中自定义的方法名。

mWebView.addJavascriptInterface(new MyTest(), "wst");//给android添加一个js接口,标识名称wst

//这里的代码是个类部类

private final class MyTest{

 @JavascriptInterface

 public void clickOnAndroid(int number) {

    MyActivity.this.runOnUiThread(new Runnable() {

        @Override

        public void run() {

          Log.i("number",number);//这里所有代码必须写到主线程中,否则报错。

        }

    });

  }

}

这样就能实现js调用android。

两个方法最重要的都是要启用webview的js功能。

// 启用javascript

mWebView.getSettings().setJavaScriptEnabled(true);

哪里不懂可以继续追问我

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。