android webview 添加內置對象

 

 

package com.android.EBrowser;javascript

import android.app.Activity;
import android.graphics.Rect;
import android.graphics.Region;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.webkit.*;html

public class EWebActivity extends Activity {
/** Called when the activity is first created. */
private static final String TAG = "WebActivity";
public WebView mWeb = null;
@Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  mWeb = (WebView) findViewById(R.id.webwiew);
  //此處須要打開js 開關
  mWeb.getSettings().setJavaScriptEnabled(true);
  mWeb.setBackgroundColor(0);

  ///添加java js 內置對象。
  mWeb.addJavascriptInterface(new Utility(), "Utility") ;

  mWeb.clearCache(true);
  mWeb.setInitialScale(100);
  mWeb.requestFocus();
  mWeb.loadUrl("http://172.23.65.145/index.htm");
}



///* js 對象實現。
class Utility {
  ////@JavascriptInterface 從android 4.2,以後,須要加上,不然js 運行後會找不到方法,
  ///這個須要注意。
  @JavascriptInterface
  public void setValue(String a,String b,String c,String d){
    Log.d(TAG,"====>a="+a +"b="+b+"c="+c+"d="+d);
  }

  @JavascriptInterface
  public String getValue(){
    Log.d(TAG,"====>to get value");
    return "eos";
  }
}
//*/
}java

 


//////////////////////////////////////////////////////////////////////////////////
//index.htm 頁面實現。android


<html>
<head>
</head>
<body >
hello world
<a id="a1" href="www.google.com" >google</a>

</br>

<script language="javascript">
  Utility.setValue("11","22","33","55");
  Utility.getValue();
</script>
</body>
</html>web

 

////////////////////////////////////////////////////////////安全

(1), 關於 js 中調用內置對象 須要這樣使用app

    Utility.setValue(); 此種擴展的js 內置對象不能,使用new Utility().setValue();ide

(2),爲安全考慮,(js能夠經過,反射機制去訪問,修改webview 等)在android 4.2 之後。js 擴展接口須要加上,「@JavascriptInterface」 ,google

  不然會報 Object [object Object] has no method 這個類錯誤。spa

相關文章
相關標籤/搜索