首先在layout檔案夾下的xml中 加入Java代碼
<WebView<br />android:id="@+id/wv1"<br />android:layout_width="fill_parent"<br />android:layout_height="fill_parent"<br />/>
Java代碼
public class jsWebDemo extends Activity {<br /> /** Called when the activity is first created. */<br /> @Override<br /> public void onCreate(Bundle savedInstanceState) {<br /> super.onCreate(savedInstanceState);<br /> setContentView(R.layout.main);<br /> WebView wView = (WebView)findViewById(R.id.wv1); </p><p> ProxyBridge pBridge = new ProxyBridge();<br /> wView.addJavascriptInterface(pBridge, "AliansBridge"); </p><p> WebSettings wSet = wView.getSettings();<br /> wSet.setJavaScriptEnabled(true); </p><p> wView.loadUrl("file:///android_asset/index.html"); </p><p> } </p><p> public class ProxyBridge {<br /> public int one () {<br /> return 1;<br /> }<br /> } </p><p>} </p><p>public class jsWebDemo extends Activity {<br /> /** Called when the activity is first created. */<br /> @Override<br /> public void onCreate(Bundle savedInstanceState) {<br /> super.onCreate(savedInstanceState);<br /> setContentView(R.layout.main);<br /> WebView wView = (WebView)findViewById(R.id.wv1);</p><p> ProxyBridge pBridge = new ProxyBridge();<br /> wView.addJavascriptInterface(pBridge, "AliansBridge");</p><p> WebSettings wSet = wView.getSettings();<br /> wSet.setJavaScriptEnabled(true);</p><p> wView.loadUrl("file:///android_asset/index.html");</p><p> }</p><p> public class ProxyBridge {<br /> public int one () {<br /> return 1;<br /> }<br /> }</p><p>}<br />
wView.addJavascriptInterface(pBridge, "AliansBridge");
上句代碼是執行個體化一個方法為的是在html中的js中調用,第二個參數則是 執行個體化方法的別名,如果要使用這個pBridge,則在js中使用的名字就是AliansBridge。
WebSettings wSet = wView.getSettings();
wSet.setJavaScriptEnabled(true);
上面兩句就是允許使用js的意思
wView.loadUrl(file:///android_asset/index.html);
就是在asset下放入一個index.html檔案,這個檔案包含js的代碼,注意路徑是“///”,這個android_asset不是檔案夾的名字是系統自動產生的,其實就是asset檔案夾的系統路徑。
index.html 內容如下
Java代碼
<html><body><br /><div id="output">Test page.</div><br /><input type="submit" value="change to 1" onclick="document.getElementById('output').innerHTML = AliansBridge.one()" /><br /></body></html> </p><p><html><body><br /><div id="output">Test page.</div><br /><input type="submit" value="change to 1" onclick="document.getElementById('output').innerHTML = AliansBridge.one()" /><br /></body></html><br />
這裡要注意 如果你只有一個方法需要被js調用
ProxyBridge pBridge = new ProxyBridge();
wView.addJavascriptInterface(pBridge, "AliansBridge");
如果你需要調用好多個方法呢 這裡只要
wView.addJavascriptInterface(this, "AliansBridge");
把整個android程式所在的類 本身執行個體化傳遞就可以了
這裡呢可以參看附件中的執行個體riademo
你如果想繼續擴充可以參看
http://www.ophonesdn.com/article/show/115
2.上面是javascript調用android的方法,那麼android也可以調用js的方法
Java代碼
public class webJsDemo extends Activity {<br /> /** Called when the activity is first created. */<br /> private WebView mWebView;<br /> private Handler mHandler = new Handler(); </p><p> @Override<br /> public void onCreate(Bundle savedInstanceState) {<br /> super.onCreate(savedInstanceState);<br /> setContentView(R.layout.main);<br /> mWebView = (WebView) findViewById(R.id.wv1); </p><p> WebSettings webSettings = mWebView.getSettings();<br /> webSettings.setSavePassword(false);<br /> webSettings.setSaveFormData(false);<br /> webSettings.setJavaScriptEnabled(true);<br /> webSettings.setSupportZoom(false); </p><p> mWebView.setWebChromeClient(new MyWebChromeClient()); </p><p> mWebView.addJavascriptInterface(new DemoJavaScriptInterface(), "demo"); </p><p> mWebView.loadUrl("file:///android_asset/demo.html");<br /> } </p><p> final class DemoJavaScriptInterface { </p><p> DemoJavaScriptInterface() {<br /> } </p><p> /**<br /> * This is not called on the UI thread. Post a runnable to invoke<br /> * loadUrl on the UI thread.<br /> */<br /> public void clickOnAndroid() { </p><p> mHandler.post(new Runnable() {<br /> public void run() {<br /> mWebView.loadUrl("javascript:wave()");<br /> }<br /> }); </p><p> }<br /> } </p><p> /**<br /> * Provides a hook for calling "alert" from javascript. Useful for<br /> * debugging your javascript.<br /> */<br /> final class MyWebChromeClient extends WebChromeClient {<br /> @Override<br /> public boolean onJsAlert(WebView view, String url, String message,<br /> JsResult result) {<br /> // TODO Auto-generated method stub<br /> Log.d("aa", message);<br /> Log.d("url", url);<br /> Log.d("result", ""+result); </p><p> result.confirm();<br /> return super.onJsAlert(view, url, message, result); </p><p> } </p><p> } </p><p>public class webJsDemo extends Activity {<br /> /** Called when the activity is first created. */<br /> private WebView mWebView;<br /> private Handler mHandler = new Handler(); </p><p> @Override<br /> public void onCreate(Bundle savedInstanceState) {<br /> super.onCreate(savedInstanceState);<br /> setContentView(R.layout.main);<br /> mWebView = (WebView) findViewById(R.id.wv1); </p><p> WebSettings webSettings = mWebView.getSettings();<br /> webSettings.setSavePassword(false);<br /> webSettings.setSaveFormData(false);<br /> webSettings.setJavaScriptEnabled(true);<br /> webSettings.setSupportZoom(false); </p><p> mWebView.setWebChromeClient(new MyWebChromeClient()); </p><p> mWebView.addJavascriptInterface(new DemoJavaScriptInterface(), "demo"); </p><p> mWebView.loadUrl("file:///android_asset/demo.html");<br /> } </p><p> final class DemoJavaScriptInterface { </p><p> DemoJavaScriptInterface() {<br /> } </p><p> /**<br /> * This is not called on the UI thread. Post a runnable to invoke<br /> * loadUrl on the UI thread.<br /> */<br /> public void clickOnAndroid() { </p><p> mHandler.post(new Runnable() {<br /> public void run() {<br /> mWebView.loadUrl("javascript:wave()");<br /> }<br /> }); </p><p> }<br /> } </p><p> /**<br /> * Provides a hook for calling "alert" from javascript. Useful for<br /> * debugging your javascript.<br /> */<br /> final class MyWebChromeClient extends WebChromeClient {<br /> @Override<br /> public boolean onJsAlert(WebView view, String url, String message,<br /> JsResult result) {<br /> // TODO Auto-generated method stub<br /> Log.d("aa", message);<br /> Log.d("url", url);<br /> Log.d("result", ""+result);</p><p> result.confirm();<br /> return super.onJsAlert(view, url, message, result);</p><p> }</p><p> } </p><p>
其中上面的代碼 也提到了怎麼在android中調試js mWebView.setWebChromeClient(new MyWebChromeClient());
上面的代碼來源於別人的執行個體。
最後還要注意在這個執行個體中demo.html和兩個image應該在同一個檔案夾asset下