Android控件使用:WebView(一)
2015-10-17 17:26
483 查看
#1 webview = new WebView(this);
//实例化WebView对象,this为Context
#2 webview.loadUrl("http://www.51cto.com/");
//加载需要显示的网页
#3 webview.getSettings().setJavaScriptEnabled(true);
//设置WebView属性,能够执行Javascript脚本
会出现警告:Using setJavaScriptEnabled
can introduce XSS vulnerabilities into you application, review carefully.
原因:如果你的应用没有在WebView内直接使用JavaScript,不要调用setJavaScriptEnabled()我们见过这个方法在简单的代码中执行,也许会导致在产品应用中改变用途
-- 所以如果必要的化移除它默认
的,WebView不执行JavaScript,所以跨站脚本攻击不可能产生。使用addJavaScriptInterface()要特别的小心,因为它允许JavaScript执行通常保留给Android应用的操作只把addJavaScriptInterface()暴露给可靠的输入源,如果不受信任的输入是被允许的,不受信任的JavaScript也许会执行Android方法。
解决方法:
1、开发文档中WebView有所提及
2、最简单的方法:加入:@SuppressLint("SetJavaScriptEnabled") 忽略这个警告
#4 webView.setWebViewClient(new MyWebViewClient()); //防止跳转浏览器
class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
#5 webView 监听back键
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()){
webView.goBack();
return true;
}
return false;
}
Demo:
public class MainActivity extends Activity {
private WebView webView;
@SuppressLint("SetJavaScriptEnabled")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
webView = new WebView(this);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl("http://www.51cto.com/");
webView.setWebViewClient(new MyWebViewClient());
setContentView(webView);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()){
webView.goBack();
return true;
}
return false;
}
class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
}
注意添加权限:<uses-permission android:name="android.permission.INTERNET" />
//实例化WebView对象,this为Context
#2 webview.loadUrl("http://www.51cto.com/");
//加载需要显示的网页
#3 webview.getSettings().setJavaScriptEnabled(true);
//设置WebView属性,能够执行Javascript脚本
会出现警告:Using setJavaScriptEnabled
can introduce XSS vulnerabilities into you application, review carefully.
原因:如果你的应用没有在WebView内直接使用JavaScript,不要调用setJavaScriptEnabled()我们见过这个方法在简单的代码中执行,也许会导致在产品应用中改变用途
-- 所以如果必要的化移除它默认
的,WebView不执行JavaScript,所以跨站脚本攻击不可能产生。使用addJavaScriptInterface()要特别的小心,因为它允许JavaScript执行通常保留给Android应用的操作只把addJavaScriptInterface()暴露给可靠的输入源,如果不受信任的输入是被允许的,不受信任的JavaScript也许会执行Android方法。
解决方法:
1、开发文档中WebView有所提及
2、最简单的方法:加入:@SuppressLint("SetJavaScriptEnabled") 忽略这个警告
#4 webView.setWebViewClient(new MyWebViewClient()); //防止跳转浏览器
class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
#5 webView 监听back键
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()){
webView.goBack();
return true;
}
return false;
}
Demo:
public class MainActivity extends Activity {
private WebView webView;
@SuppressLint("SetJavaScriptEnabled")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
webView = new WebView(this);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl("http://www.51cto.com/");
webView.setWebViewClient(new MyWebViewClient());
setContentView(webView);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()){
webView.goBack();
return true;
}
return false;
}
class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
}
注意添加权限:<uses-permission android:name="android.permission.INTERNET" />
相关文章推荐
- 安卓蓝牙通信
- Android OpenGL ES从零开始
- Android复合自定义组件(几个基本组件组成的自定义组件)
- 在Swift中,使用SDWebImage做缓存后获取缩略图的大小。
- iOS Notification 的使用
- IOS APP资源网站汇总
- 你不知道的JavaScript--Item9 call(),apply(),bind()与回调
- Android中显示GIF动画的实现代码
- 你不知道的JavaScript--Item9 call(),apply(),bind()与回调
- Objective-C 入门笔记
- Cocos2d-x 游戏开发 - 代码与CocosBuilder绑定
- android 32 Gallery:横着滚动的列表
- Android Progress 设置进度的背景色
- NSNumber与NSInteger的区别
- 关于service需要知道的一切
- 控件内边距、外边距
- Android ListView分析
- 从源码角度理解android动画Interpolator类的使用
- 从源码角度理解android动画Interpolator类的使用
- 从源码角度理解android动画Interpolator类的使用