android之webView加载javascropt
首先在layout文件夹下的xml中 加入
<WebViewandroid:id="@+id/wv1"android:layout_width="fill_parent"android:layout_height="fill_parent"/>
public class jsWebDemo extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); WebView wView = (WebView)findViewById(R.id.wv1); ProxyBridge pBridge = new ProxyBridge(); wView.addJavascriptInterface(pBridge, "AliansBridge"); WebSettings wSet = wView.getSettings(); wSet.setJavaScriptEnabled(true); wView.loadUrl("file:///android_asset/index.html"); }public class ProxyBridge {public int one () {return 1;}}}
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 内容如下
<html><body><div id="output">Test page.</div><input type="submit" value="change to 1" onclick="document.getElementById('output').innerHTML = AliansBridge.one()" /></body></html>
这里要注意 如果你只有一个方法需要被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的方法
public class webJsDemo extends Activity { /** Called when the activity is first created. */private WebView mWebView; private Handler mHandler = new Handler(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mWebView = (WebView) findViewById(R.id.wv1); WebSettings webSettings = mWebView.getSettings(); webSettings.setSavePassword(false); webSettings.setSaveFormData(false); webSettings.setJavaScriptEnabled(true); webSettings.setSupportZoom(false); mWebView.setWebChromeClient(new MyWebChromeClient()); mWebView.addJavascriptInterface(new DemoJavaScriptInterface(), "demo"); mWebView.loadUrl("file:///android_asset/demo.html"); } final class DemoJavaScriptInterface { DemoJavaScriptInterface() { } /** * This is not called on the UI thread. Post a runnable to invoke * loadUrl on the UI thread. */ public void clickOnAndroid() { mHandler.post(new Runnable() { public void run() { mWebView.loadUrl("javascript:wave()"); } }); } } /** * Provides a hook for calling "alert" from javascript. Useful for * debugging your javascript. */ final class MyWebChromeClient extends WebChromeClient { @Overridepublic boolean onJsAlert(WebView view, String url, String message,JsResult result) {// TODO Auto-generated method stub Log.d("aa", message); Log.d("url", url); Log.d("result", ""+result); result.confirm(); return super.onJsAlert(view, url, message, result); } }
其中上面的代码 也提到了怎么在android中调试js mWebView.setWebChromeClient(new MyWebChromeClient());
上面的代码来源于别人的实例。
最后还要注意在这个实例中demo.html和两个image应该在同一个文件夹asset下
更多相关文章
- 另类方法屏蔽Android4.03的HOME按键
- android SDK更新方法总结
- android设置Activity背景色为透明的2种方法
- Android 性能优化实例
- android中设置分隔线几种方法
- android 使用DigestUtilsmd5加密的方法
- Android getWindow().setFlags方法与SD卡权限
- android 浏览器怎么支持 window.close() 和window.opener.locati
- Android修改自己程序字体的方法详解