#1 webview = new WebView(this);
//实例化WebView对象,this为Context
//加载需要显示的网页
#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") 忽略这个警告
class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()){
webView.goBack();
return true;
}
return false;
}
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;
}
}
}
Demo:
public class MainActivity extends Activity {
注意添加权限:<uses-permission android:name="android.permission.INTERNET" />