
联网的权限androID.permission.INTERNET
webvIEw.getSettings().setJavaScriptEnabled(true);
// 创建WebVIEw在onCreate()中WebVIEw webvIEw = new WebVIEw(this);setContentVIEw(webvIEw);Uri uri = Uri.parse("http://www.example.com");Intent intent = new Intent(Intent.ACTION_VIEW, uri);startActivity(intent);加载内容//方式一webvIEw.loadUrl("http://slashdot.org/");//方式二webvIEw.loadData (HTMLText, "text/HTML","utf-8/gbk")//方式三webvIEw.loadDataWithBaseURL(baseUrl,HTMLText,"text/HTML", "utf-8/gbk",historyUrl)设置WebChromeClIEntsetWebChromeClIEnt()WebChromeClIEnt是辅助WebVIEw处理JavaScript的对话框,网站图标,网站Title,加载进度等 onCloseWindow(关闭WebVIEw) onCreateWindow() //JavaScript警告对话框显示 返回true/false onjsAlert() //提示对话框 返回true/false onjsPrompt //确认对话框 返回true/false onjsConfirm //当前页面的加载进度 onProgressChanged //通知主机应用程序的新的标识当前页面 onReceivedIcon //通知主机应用程序的文档标题的改变 onReceivedTitle设置WebVIEwClIEntset WebVIEwClIEnt()帮助WebVIEw处理各种通知、请求事件 //更新历史记录 doUpdateVisitedHistory() //重新请求网页数据默认不重新发送 onFormResubmission() //加载给定的url指定的资源。 onLoadResource() //在页面加载开始时调用 onPageStarted() //在页面加载结束时调用 onPageFinished() //报告错误信息 主要的资源不可用 onReceivedError() //设置WebVIEw对请求的回应 默认行为是取消请求。 onReceivedhttpAuthRequest() //从服务器接收到http错误一直在加载资源。http错误状态码> =400 onReceivedhttpError() //SSL错误加载资源时发生 默认行为是取消负载。 onReceivedSslError() //WebVIEw发生改变时调用 onScaleChanged() //重写此方法才能够处理在浏览器中的按键事件。 //返回true/false,true需要对事件进行处理 默认行为返回false。 shouldOverrIDeKeyEvent() //在点击请求的是链接是才会调用,重写此方法返回true表明点击网页里面的链接还是在当前的webvIEw里跳转,不跳到浏览器那边。 //提供WebVIEwClIEnt时,返回true由应用程序进行处理url,返回false当前WebVIEw处理url shouldOverrIDeUrlLoading(WebVIEw vIEw, String url) WebVIEw的WebSettings WebSettings webSettings = webVIEw.getSettings(); //支持Js setJavaScriptEnabled(true); //设置支持缩放 setBuiltInZoomControls(true); //支持缩放 setSupportZoom(true); //设置缓存模式 setCacheMode(); //将图片调整到适合webvIEw的大小 setUseWIDeVIEwPort(false); //缩放至屏幕的大小 setLoaDWithOverviewmode(true); //支持插件 setPluginsEnabled(true); //是否支持多个窗口。 supportMultiplewindows(); //支持内容重新布局 setLayoutAlgorithm(LayoutAlgorithm.SINGLE_ColUMN); //设置可以访问文件 setAllowfileAccess(true); //当webvIEw调用requestFocus时为webvIEw设置节点 默认true setNeedInitialFocus(true); //支持通过Js打开新窗口 setJavaScriptCanopenwindowsautomatically(true); //支持自动加载图片 setLoadsImagesautomatically(true); 更多设置 //当前加载的进度 getProgress () //当前加载地址的标题 getTitle () //停止加载 stopLoading() //重新加载 reload() //视图滚动的内容这通常是由于scrollBy(int,int)scrollTo(int,int)被调用 onScrollChanged()如果页面中链接,如果希望点击链接继续在当前browser中响应,而不是新开AndroID的系统browser中响应该链接,必须覆盖 webvIEw的WebVIEwClIEnt对象。mWebVIEw.setWebVIEwClIEnt(new WebVIEwClIEnt() { public boolean shouldOverrIDeUrlLoading(WebVIEw vIEw, String url) { vIEw.loadUrl(url); return true; } }); 如果希望浏览的网页回退而不是退出浏览器,需要在当前Activity中处理并消费掉该Back事件。public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebVIEw.canGoBack()) { mWebVIEw.goBack(); return true; } return super.onKeyDown(keyCode, event); }如果希望WebVIEw可以支持JavaScript class JsObject { {@literal @}JavaScriptInterface public String toString() { return "injectedobject"; } } webVIEw.addJavaScriptInterface(new JsObject(), "injectedobject"); webVIEw.loadData("<!DOCTYPE HTML><Title></Title>", "text/HTML", null); webVIEw.loadUrl("JavaScript:alert(injectedobject.toString())");举个栗子local.HTML<HTML><head><Meta http-equiv="Content-Type" content="text/HTML;charset=gb2312"><script type="text/JavaScript"> function javacallJs() { document.getElementByID("content").INNERHTML += "<br\>java调用了Js函数"; } function javacallJswithargs(arg) { document.getElementByID("content").INNERHTML += ("<br\>" + arg); }</script></head><body> this is my HTML <br /> <a onClick="window.wst.startFunction()">点击调用java代码</a> <br /> <a onClick="window.wst.startFunction('hello world')">点击调用java代码并传递参数</a> <br /> <div ID="content">内容显示</div></body></HTML>Java public class MainActivity extends Activity { private WebVIEw contentWebVIEw = null; private TextVIEw msgVIEw = null; @Suppresslint("SetJavaScriptEnabled") @OverrIDe public voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.main); contentWebVIEw = (WebVIEw) findVIEwByID(R.ID.webvIEw); msgVIEw = (TextVIEw) findVIEwByID(R.ID.msg); contentWebVIEw.getSettings().setJavaScriptEnabled(true); contentWebVIEw.loadUrl("file:///androID_asset/wst.HTML"); button button = (button) findVIEwByID(R.ID.button); button.setonClickListener(btnClickListener); contentWebVIEw.addJavaScriptInterface(this, "wst"); } OnClickListener btnClickListener = new button.OnClickListener() { public voID onClick(VIEw v) { contentWebVIEw.loadUrl("JavaScript:javacallJs()"); contentWebVIEw.loadUrl("JavaScript:javacallJswithargs(" + "'来自Java的问候'" + ")"); } }; public voID startFunction() { Toast.makeText(this, "Js java ", Toast.LENGTH_SHORT).show(); runOnUiThread(new Runnable() { @OverrIDe public voID run() { msgVIEw.setText(msgVIEw.getText() + "\njs java "); } }); } public voID startFunction(final String str) { Toast.makeText(this, str, Toast.LENGTH_SHORT).show(); runOnUiThread(new Runnable() { @OverrIDe public voID run() { msgVIEw.setText(msgVIEw.getText() + "\njs java " + str); } }); }}常见问题onPageStarted()别调用多次原因: 网址的加载过程中存在重定向问题,所以会被调用多次
解决办法:
public voID onPageStarted(WebVIEw vIEw, String url, Bitmap favicon) { if(!isLoading){ isLoading = true; //Todo someting }}public voID onPageFinished(){ isLoading = false;}onPageStarted()调用webVIEw.canGoBack()返回 false原因:有时在加载网址的时候,需要对当前webvIEw的状态进行判断,例如,自定义了一些前进、后退按钮,便需要实时的刷新按钮,需要在网址发生变化时监听webVIEw;
在onPageStarted()里设置监听,去获取webVIEw 的状态,但是有时会出现上述问题,明明webvIEw是可以返回的,在onPageStarted()里获取的值为false。
解决办法:经过测试onProgressChanged()方法的调用情况,发现,在网络的加载进度在30%左右以后,canGoBack() 才返回 true;所以可以在onProgressChanged() 里加入监听,或是在onPageFinished()里去监听 webVIEw的状态。
低版本上,会出现webvIEw 销毁时 程序发生crash的情况原因是:销毁的时候出现问题.
解决办法:
if(webVIEw != null) { // 要首先移除 removeVIEw(webVIEw); // 清理缓存 webVIEw.stopLoading(); webVIEw.onPause(); webVIEw.clearHistory(); webVIEw.clearCache(true); webVIEw.clearFormData(); webVIEw.cleaRSSlPreferences(); WebStorage.getInstance().deleteallData(); webVIEw.destroyDrawingCache(); webVIEw.removeAllVIEws(); // 最后再去webVIEw.destroy(); webVIEw.destroy(); } 参见谷歌中国
总结以上是内存溢出为你收集整理的Android组件之WebView全部内容,希望文章能够帮你解决Android组件之WebView所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)