android軟體開發之webView.addJavascriptInterface迴圈漸進【二】

來源:互聯網
上載者:User

標籤:

本篇文章由:http://www.sollyu.com/android-software-development-webview-addjavascriptinterface-cycle-of-gradual-two/

說明文章列表

android軟體開發之webView.addJavascriptInterface迴圈漸進【一】: http://www.sollyu.com/?p=302

android軟體開發之webView.addJavascriptInterface迴圈漸進【二】: http://www.sollyu.com/?p=586

上一篇文章發布之後,得到了大家的一致好評,在文章中答應出的第二篇也一直一直沒有出來,今天就補出來。OK話不多,咱明直接開始,因為上一篇的文章寫的時間已經過早,已經沒有辦法還原原工程,所以我這裡就建立了一個工程。

建立工程

為了讓大家更容易的理解,所以我這裡就盡量的將代碼縮短,這是我的工程的配置

建立好工程之後,然後將介面調整為下面這樣

添加代碼

首先將兩個button和webview添加進來,並給web添加兩個JavaScript調用介面testFunc1testFunc2

private Button  m_testButtom1;private Button  m_testButtom2;private WebView m_WebView;@SuppressLint("SetJavaScriptEnabled")@Overrideprotected 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預設就使用當前線程的Looperpublic 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); }    @Override    public void handleMessage(Message msg) {        switch (msg.what) {        case WM_SET_FUNC1:            Toast.makeText(getApplicationContext(), msg.obj.toString(), Toast.LENGTH_LONG).show();            break;        case WM_SET_FUNC2:            Toast.makeText(getApplicationContext(), msg.obj.toString(), Toast.LENGTH_LONG).show();            break;        default:            break;        }    }}

添加完成之後,在來添加按鈕點擊事件

m_testButtom1.setOnClickListener(new OnClickListener() {    @Override    public void onClick(View arg0) {        String string = "http://www.sollyu.com";        m_WebView.loadUrl("javascript:testFunc1('"+string+"');");   // 調用html中的JavaScript函數testFunc1,這裡只有一個參數    }});m_testButtom2.setOnClickListener(new OnClickListener() {    @Override    public void onClick(View arg0) {        String string = "這裡有兩個參數:";        int nInt = 191067617;        m_WebView.loadUrl("javascript:testFunc2('"+string+"',"+String.valueOf(nInt)+")"); // 通用這裡有2個參數    }});

這樣在Android的代碼就算寫完了,下面在來看一下demo.html

Html檔案

demo.html原始碼為:

<html>    <script language="javascript">        function testFunc1(var1)        {            return_var = "原創文章:" + var1;            window.demo.testFunc1(return_var);      // 調用Android代碼中的 testFunc1 的函數            return return_var;        }        function testFunc2(var1,var2)        {            return_var = var1 + var2;            window.demo.testFunc2(return_var);      // 這裡的參數就為返回到android的值            return return_var;        }    </script> </html>
運行

android軟體開發之webView.addJavascriptInterface迴圈漸進【二】

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.