WebView学习一
来源:互联网 发布:爱淘宝精品推荐 编辑:程序博客网 时间:2024/06/07 03:56
为了学习webview,打算从官网API学起。因为我英文不好,所以打算译下这篇文章,慢慢去认识这个控件。(官网地址)
Building Web Apps in WebView
Adding a WebView to Your Application
<?xml version="1.0" encoding="utf-8"?><WebView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/webview" android:layout_width="fill_parent" android:layout_height="fill_parent"/>
loadUrl()
. 例如:yWebView = (WebView) findViewById(R.id.webview); myWebView.loadUrl("http://www.example.com");
INTERNET
permission. 例如:<manifest ... > <uses-permission android:name="android.permission.INTERNET" /> ...</manifest>这些就是所有你需要webview的一个最基本功能,去展示一个web页面。
Using JavaScript in WebView
Enabling JavaScript
setJavaScriptEnabled()方法。
如:
WebSettings
提供各种各样的设置,也许你会发现很有用的设置。例如,如果你开发一个web应用,它是专门为你android应用的webview设计。然后你可以定制一个用户代理 字符串通过使用setUserAgentString()方法,然后通过查询你的web页面中询用户代理,去验证客户端请求你的web页面是确实是你的android应用程序。
WebView myWebView = (WebView) findViewById(R.id.webview);WebSettings webSettings = myWebView.getSettings();webSettings.setJavaScriptEnabled(true);
WebView
in your Android application, you can create interfaces between your JavaScript code and client-side Android code. For example, your JavaScript code can call a method in your Android code to display a Dialog
, instead of using JavaScript's alert()
function.To bind a new interface between your JavaScript and Android code, call addJavascriptInterface()
, passing it a class instance to bind to your JavaScript and an interface name that your JavaScript can call to access the class.
大概意思是这样的:
当你想要在你安卓应用的webview上设置一个web的应用时,你能在你android和js之间创立一个接口。例如,你的js代码能够调用你安卓代码去显示一个对话框,而不是用js的alert()方法。
为了去绑定一个新的接口在js和android之间,你需要调用addJavascriptInterface()方法,然后通过一个类的实例去绑定你的js, 然后js可以通过接口名字访问该类。
例如,你可以引入如下的类在你的android 应用中:
public class WebAppInterface { Context mContext; /** Instantiate the interface and set the context */ WebAppInterface(Context c) { mContext = c; } /** Show a toast from the web page */ @JavascriptInterface public void showToast(String toast) { Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show(); }}
注意:如果你应用的targetSdkVersion是17或者更高 你必须在你每个的js需要调用的android类中的方法上 加上
@JavascriptInterface,而且这个方法必须是public的。 如果你不加的话,这些方法将会无效的。
在这个例子中,这个 WebAppInterface类允许网页去创建一个Toast通过使用showToast()方法。
你可以绑定这个类到js通过在你的WebView 使用addJavascriptInterface()方法然后命名这个接口为‘Android’(名字是可以任意取的).例如:
WebView webView = (WebView) findViewById(R.id.webview);webView.addJavascriptInterface(new WebAppInterface(this), "android");
以上为js在webview运行中创建了一个名为android的接口。在这一点上,你的web应用已经拿到了WebAppInterface类的访问权了。例如,以下有一些html和js的代码片断 当用户点击一个按钮的时候,就会创建一个toast通过使用这个新的接口:
<input type="button" value="Say hello" onClick="showAndroidToast('Hello Android!')" /><script type="text/javascript"> function showAndroidToast(toast) { Android.showToast(toast); }</script>
WebAppInterface.showToast()
方法。
Note: 这个绑定的sj的对象是运行在另外一个线程的,而不是在构造的这个线程。
Caution:使用addJavascriptInterface()允许js控制你的android应用。这可以是一个非常有用的特点,也可以是一个危险的安全问题。当这个HTML 在这个webview中靠不住的时候(例如,这个HTML是被一个不认识的人或者 不认识的程序提供的时候),这时候一个攻击者能引用这个HTML然后提交你的客户端的代码或任何他想要的代码。像这样,你就不应该使用 addJavascriptInterface()
方法,除非你能保证在你的webview中的这个HTML和js都是你写的。你也不应该允许用户在你的webview中导航到其他不属于你的网页(相反,在默认情况下允许用户的默认浏览器打开一个外链接,用户的web浏览器就会打开所有的url链接,所以要当心只有你在以下描述中处理页面的导航)。
Handling Page Navigation
WebView myWebView = (WebView) findViewById(R.id.webview); myWebView.setWebViewClient(new WebViewClient());
就这样,现在用户所有点击的链接都会在你的WebView加载。
private class MyWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (Uri.parse(url).getHost().equals("www.example.com")) { // This is my web site, so do not override; let my WebView load the page return false; } // Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); startActivity(intent); return true; }}
WebView myWebView = (WebView) findViewById(R.id.webview);myWebView.setWebViewClient(new MyWebViewClient());
Navigating web page history
当你的WebView 重写了url的加载,WebView就会自动的积累你的历史访问路径。你可以向前导航和向后导航通过 历史的 goBack()和goForward()方法。
例如,以下例子是 展示 如何使你页面通过设置的回退按钮导航回去:
@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) { // Check if the key event was the Back button and if there's history if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) { myWebView.goBack(); return true; } // If it wasn't the Back key or there's no web page history, bubble up to the default // system behavior (probably exit the activity) return super.onKeyDown(keyCode, event);}
这个 canGoBack()方法返回
true 如果那确实有访问的历史路径 的话, 同样的你能使用 canGoForward()
方法去检查是否有向前的访问路径.如果你不执行这个检查, 一旦用户到达历史路径的结尾, goBack()
or goForward()
什么也做不了。
- WebView学习一
- android webView 学习(一)
- WebView一
- WebView学习
- WebView学习
- webView学习
- WebView 学习
- WebView学习
- webview学习
- WebView学习
- 学习webview
- WebView学习
- Android WebView(一) WebView详解
- WebView(一)
- webView 高级用法 一
- Android WebView使用(一)
- (一) Android WebView是什么?
- Android WebView(一)
- 罗辑思维-无广告的增强知识收集器
- 冒泡排序和查找数组中最大的数及查找两个数中最大的数
- Sysdig:Linux服务器监控和排障利器
- 分治思想之归并排序
- 新手常见的python运行错误
- WebView学习一
- [转]微架构设计:微博计数器的设计
- J2ee高并发情况下监听器
- [LeetCode] 424. Longest Repeating Character Replacement 解题报告
- mybatis笔记
- 中断上半部和下半部之低半部实现方法-softirq tasklet workqueue
- Service Worker:让网页无网络也能访问
- 快毕业了,撸一个小项目(新闻段子客户端)
- redis3.2版本最新配置说明