WebView調用javaScript

來源:互聯網
上載者:User

從WebView初探 瞭解到WebView的強大,。聽說WebView對Javascript的支援也很強,想從網上找些例子,還很難找,最終從google老家找了一個Java和Javascript互調的例子 ,當時看了,下巴“咣當”就掉在地上了,太強了!這樣也行?

整個Eclipse ADT工程例子中都有,這裡重點分析一下代碼:

Java代碼 

public class WebViewDemo extends Activity {<br /> private WebView mWebView;<br /> private Handler mHandler = new Handler(); </p><p> public void onCreate(Bundle icicle) {<br /> super.onCreate(icicle);<br /> setContentView(R.layout.webviewdemo);<br /> mWebView = (WebView) findViewById(R.id.webview);<br /> WebSettings webSettings = mWebView.getSettings();<br /> webSettings.setJavaScriptEnabled(true);<br /> mWebView.addJavascriptInterface(new Object() {<br /> public void clickOnAndroid() {<br /> mHandler.post(new Runnable() {<br /> public void run() {<br /> mWebView.loadUrl("javascript:wave()");<br /> }<br /> });<br /> }<br /> }, "demo");<br /> mWebView.loadUrl("file:///android_asset/demo.html");<br /> }<br />}  

 

public class WebViewDemo extends Activity { private WebView mWebView; private Handler mHandler = new Handler(); public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.webviewdemo); mWebView = (WebView) findViewById(R.id.webview); WebSettings webSettings = mWebView.getSettings(); webSettings.setJavaScriptEnabled(true); mWebView.addJavascriptInterface(new Object() { public void clickOnAndroid() { mHandler.post(new Runnable() { public void run() { mWebView.loadUrl("javascript:wave()"); } }); } }, "demo"); mWebView.loadUrl("file:///android_asset/demo.html"); }} 

這裡的重點是addJavascriptInterface(Object obj,String interfaceName)方法,該方法將一個java對象綁定到一個javascript對象中,javascript對象名就是interfaceName,範圍是Global。這樣初始化webview後,在webview載入的頁面中就可以直接通過javascript:window.demo訪問到綁定的java對象了。來看看在html中是怎樣調用的:

Html代碼 

<html><br /> <mce:script language="javascript"><!--</p><p> function wave() {<br /> document.getElementById("droid").src="android_waving.png";<br /> } </p><p>// --></mce:script><br /> <body><br /> <a onClick="window.demo.clickOnAndroid()"><br /> <img id="droid" src="android_normal.png" mce_src="android_normal.png"/><br><br /> Click me!<br /> </a><br /> </body><br /></html>  

<html> <mce:script language="javascript"><!--<br /> function wave() { document.getElementById("droid").src="android_waving.png"; }<br />// --></mce:script> <body> <a onClick="window.demo.clickOnAndroid()"> <img id="droid" src="android_normal.png" mce_src="android_normal.png"/><br> Click me! </a> </body></html> 

 這樣在javascript中就可以調用java對象的clickOnAndroid()方法了,wave()方法是java中調用javascript的例子。

這裡還有幾個知識點:

1)為了讓WebView從apk檔案中載入assets,Android SDK提供了一個schema,首碼為"file:///android_asset/"。WebView遇到這樣的schema,就去當前包中的assets目錄中找內容。如上面的"file:///android_asset/demo.html"

2)addJavascriptInterface方法中要綁定的Java對象及方法要運行另外的線程中,不能運行在構造他的線程中,這也是使用Handler的目的

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.