Android与Javascript交互



转载请说明出处!

作者:kqw攻城狮

出处:个人站 | CSDN



本篇参考Android与HTML+JS交互入门

效果图

加载本地Html

contentWebView = (WebView) findViewById(R.id.webview);
// 加载Assets下的Html
contentWebView.loadUrl("file:///android_asset/html/test.html");

启用Javascript

contentWebView.getSettings().setJavaScriptEnabled(true);
contentWebView.addJavascriptInterface(this, "android");

Android调用Javascript的方法

Javascript写法

<script type="text/javascript">
    function jsFunction(){
         document.getElementById("content").innerHTML = "JS方法被调用";
    }
    function jsFunctionArg(arg){
         document.getElementById("content").innerHTML = "JS方法被调用并收到参数:<br/>" + arg;
    }
</script>

Android写法

// 调用JS的jsFunction方法
contentWebView.loadUrl("javascript:jsFunction()");
// 调用JS的jsFunctionArg方法
contentWebView.loadUrl("javascript:jsFunctionArg(‘[Android传递过来的数据]‘)");

Javascript调用Android的方法

Android方法

@JavascriptInterface
public void androidFunction() {
    Snackbar.make(contentWebView, "Android的方法被调用", Snackbar.LENGTH_SHORT).show();
}
@JavascriptInterface
public void androidFunction(String text) {
    Snackbar.make(contentWebView, "Android的方法被调用并收到参数 : \n" + text, Snackbar.LENGTH_SHORT).show();
}

Javascript调用

<input type="button" style="width:300px;height:50px;" value="JS调用Android方法" onclick="window.android.androidFunction()" />
<input type="button" style="width:300px;height:50px;" value="JS调用Android带有参数的方法" onclick="window.android.androidFunction(‘[JS传递过来的数据]‘)" />

Code

HTML

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html;charset=gb2312">
        <script type="text/javascript">
            function jsFunction(){
                 document.getElementById("content").innerHTML = "JS方法被调用";
            }
            function jsFunctionArg(arg){
                 document.getElementById("content").innerHTML = "JS方法被调用并收到参数:<br/>" + arg;
            }
        </script>
    </head>
    <body>
        <h1>HTML页面</h1>
        <hr/>
        <h3><div id="content">|</div></h3>
        <hr/>
        <input type="button" style="width:300px;height:50px;" value="JS调用Android方法" onclick="window.android.androidFunction()" />
        <br/>
        <input type="button" style="width:300px;height:50px;" value="JS调用Android带有参数的方法" onclick="window.android.androidFunction(‘[JS传递过来的数据]‘)" />
    </body>
</html>

测试类

package com.kongqw.kqwandroidjsdemo;

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.webkit.JavascriptInterface;
import android.webkit.WebView;

public class MainActivity extends AppCompatActivity {

    private WebView contentWebView;

    @SuppressLint({"JavascriptInterface", "SetJavaScriptEnabled", "AddJavascriptInterface"})
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        contentWebView = (WebView) findViewById(R.id.webview);
        // 加载Assets下的Html
        contentWebView.loadUrl("file:///android_asset/html/test.html");
        // 启用Javascript
        contentWebView.getSettings().setJavaScriptEnabled(true);
        contentWebView.addJavascriptInterface(this, "android");
    }

    @JavascriptInterface
    public void androidFunction() {
        Snackbar.make(contentWebView, "Android的方法被调用", Snackbar.LENGTH_SHORT).show();
    }

    @JavascriptInterface
    public void androidFunction(String text) {
        Snackbar.make(contentWebView, "Android的方法被调用并收到参数 : \n" + text, Snackbar.LENGTH_SHORT).show();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id == R.id.action_js_function1) {
            // 调用JS的jsFunction方法
            contentWebView.loadUrl("javascript:jsFunction()");
            return true;
        } else if (id == R.id.action_js_function2) {
            // 调用JS的jsFunctionArg方法
            contentWebView.loadUrl("javascript:jsFunctionArg(‘[Android传递过来的数据]‘)");
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}
时间: 2024-12-16 14:25:29

Android与Javascript交互的相关文章

Android WebView JavaScript交互

今天介绍一下,Android中Webview与JavaScript的交互,首先是在布局文件里添加webview控件: [html] view plaincopy <WebView android:id="@+id/webview" android:layout_width="fill_parent" android:layout_height="fill_parent" /> 然后是在manifest里添加权限: [html] vie

Android中和javascript交互报:android Uncaught ReferenceError:

可能原因如下: 1.HTML页面上的javascript写的有问题,可以先在HTML上调试排除语法等问题: 2.使用webView.loadUrl调用的时候字符串要拼写正确,尤其是传入参数时,格式可以如下: webView.loadUrl("javascript:showData('"+json+"')"); 3.调用的时候可能HTML页面还没有加载完毕,使用Handler的post方法里,例如: private Handler mHandler = new Han

高德地图组件在Android的应用以及Android与JavaScript的交互

最近在慕课网学习了关于高德地图组件的课程(其实就是一个广告,内容和官网的API完全一样),发现这个JavaScript API比Android API简单方便多了,于是就打算放在Android APP上来实现,花了一点小功夫,但是最终还是实现了,后来打算扩展的时候遇到个问题:就是高德官网有一个坐标拾取点(高德的坐标和我们平时取的坐标不一样,可以将高德坐标理解为中国的国标,直接获取的坐标是国际标准的坐标),后来发现有html文件直接实现了这个功能,于是就把这个html扒出来了,但是重点问题来了:如

Android Webview 和Javascript交互,实现Android和JavaScript相互调用

在Android的开发过程中.遇到一个新需求.那就是让Java代码和Javascript代码进行交互.在IOS中实现起来很麻烦.而在Android中相对来说容易多了.Android对这种交互进行了很好的封装.我们可以很简单的用Java代码调用WebView中的js函数.也可以用WebView中的js来调用Android应用中的Java代码. 案例主要包含了: Html中调用Android方法 Android调用JS方法无参数 Android调用JS方法有参数 Android调用JS方法有参数且有

android 中java和javascript交互

android的WebView是一个非常强大的控件,本文主要针对其简单使用和笔者在使用时所遇到的问题做一些总结. 本文参考了该博文:http://blog.csdn.net/zgjxwl/article/details/9627685 一.WebView中Java与javascript交互 1.这是要和js交互的注入接口类: public final class JavascriptInteerface{ @JavascriptInterface public void test(String

android与javascript的交互

上一篇博文:Android WebView使用基础已经说了一些Android中WebView的基本使用. 本篇文章主要介绍WebView中的JavaScript代码的执行相关,已经JS代码与Android代码的互相调用. (因为本人对Web开发并不是很熟悉,所以如果有哪些地方说得不对,还请指正.) 在WebView中使用JavaScript 如果你想要载入的页面中用了JavaScript,你必须为你的WebView使能JavaScript. 一旦使能之后,你也可以自己创建接口在你的应用和Java

Android:WebView与Javascript交互(相互调用参数、传值)

Android中可以使用WebView加载网页,同时Android端的java代码可以与网页上的javascript代码之间相互调用. 效果图: (一)Android部分: 布局代码: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_widt

android 与js交互

android与js交互 // 设置编码 webView.getSettings().setDefaultTextEncodingName("utf-8"); // 支持js webView.getSettings().setJavaScriptEnabled(true); //参数1为传递的android对象,参数2为传递对象的变量名称之后JS中使用变量名进行对对象的操作 webView.addJavascriptInterface(new TestJs(), "testO

Objective-C与JavaScript交互的那些事

最近公司的运营瞎搞了个活动,其活动要服务端提供数据支持,web前端在微信公众账号内作为主要的运营阵地,而iOS.Android要提供相应的入口及页面进行配合.一个活动,动用了各个端的程序猿.而在这里面技术方面主要就是涉及到web端和服务端的交互,web前端和iOS.Android的交互.本人作为一个iOS开发者,今天就聊聊web.iOS.Android三端的交互,其实在说明白一点就是方法的互相调用而已.这里主要讲解iOS.Android会稍微提一下,仅作参考. 此篇文章的逻辑图 图0-0 此篇文