easyclick webview深入了解

用webview 主要是可以很愉快的设计界面

easyclick文档有很多描述,这里仅讲下创建webview 的更多操作

importClass(android.webkit.WebView);
importClass(android.webkit.WebChromeClient);
importClass(android.webkit.WebViewClient);
importClass(android.webkit.WebResourceResponse);
importClass(android.webkit.WebSettings);
importClass(android.webkit.ValueCallback);
importClass(android.webkit.JavascriptInterface);
importClass(java.util.Locale);
importClass(java.util.HashMap);
importClass(java.text.SimpleDateFormat);

。。

var webView = new WebView(ui.getContext());
webView.setLayoutParams(layoutParams);
webView.setWebContentsDebuggingEnabled(true); //电脑chrome://inspect/#devices可远程调试
//webView.removeAllViews();
//webView.setWebChromeClient(new WebChromeClient());
webView.setWebChromeClient(
	new JavaAdapter(WebChromeClient, {
		onConsoleMessage: function (message) {
			//查看调试信息
			logd("h5: " + message.message());
		},
	})
);
webView.setWebViewClient(new WebViewClient());

。。

//一些不痛不痒的设置,根据你的需要
var mWebSettings = webView.getSettings();
//mWebSettings.setDefaultEncodingName('UTF-8');
//mWebSettings.setUserAgentString('tegong'); //user-agent
mWebSettings.setJavaScriptEnabled(true);// 支持JS
//mWebSettings.setJavaScriptCanOpenWindowsAutomatically(true);//支持通过js打开新的窗口
mWebSettings.setRenderPriority(WebSettings.RenderPriority.HIGH);//提高渲染等级
mWebSettings.setSupportZoom(true); // 设置支持缩放
//mWebSettings.setBuiltInZoomControls(false); // 显示缩放按钮
//mWebSettings.setLoadWithOverviewMode(true); //加载完全缩小的WebView
//mWebSettings.setUseWideViewPort(true); //桌面浏览器
//mWebSettings.setDomStorageEnabled(true);//使用localStorage则必须打开
//mWebSettings.setBlockNetworkImage(true);// 首先阻塞图片,让图片不显示
//mWebSettings.setBlockNetworkImage(false);// 页面加载好以后,在放开图片:
//mWebSettings.setSupportMultipleWindows(false);// 设置同一个界面,true支持多窗口
//mWebSettings.setAppCacheEnabled(true); //启用本地缓存
/*
LOAD_CACHE_ONLY: //不使用网络,只读取本地缓存数据,
LOAD_DEFAULT://根据cache-control决定是否从网络上取数据,
LOAD_CACHE_NORMAL://API level 17中已经废弃, 从API level 11开始作用同- - LOAD_DEFAULT模式,
LOAD_NO_CACHE: //不使用缓存,只从网络获取数据,
LOAD_CACHE_ELSE_NETWORK //只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据。
*/
//mWebSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); //LOAD_NO_CACHE
//mWebSettings.setDatabaseEnabled(true);
//设置数据库缓存路径
//mWebSettings.setDatabasePath(cacheDirPath);
//设置应用缓存目录
//mWebSettings.setAppCachePath(cacheDirPath);
//mWebSettings.setAppCacheMaxSize(Long.MAX_VALUE);
//mWebSettings.setPluginsEnabled(true); // 插件
//mWebSettings.setPluginState(WebSettings.PluginState.ON_DEMAND);
//mWebSettings.setGeolocationEnabled(true);
//mWebSettings.setNeedInitialFocus(true);// 禁止webview上面控件获取焦点(黄色边框)
//mWebSettings.setAllowContentAccess(true);
//mWebSettings.setAllowFileAccess(true);
//mWebSettings.setAllowFileAccessFromFileURLs(true); //跨域本地文件file
//mWebSettings.setAllowUniversalAccessFromFileURLs(true); //跨域file或http,非域名跨域
//mWebSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); //允许http和https混合内容
mWebSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE); //兼容混合
// mWebSettings.setLayoutAlgorithm(LayoutAlgorithm.NARROW_COLUMNS);
// mWebSettings.setPageCacheCapacity(IX5WebSettings.DEFAULT_CACHE_CAPACITY);
/*
importClass(android.os.Build);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN){
	mWebSettings.setAllowUniversalAccessFromFileURLs(true);
}else{
	var clazz = mWebSettings.getClass();
	var method = clazz.getMethod("setAllowUniversalAccessFromFileURLs", boolean.class);
	if (method != null) {
		method.invoke(webView.getSettings(), true);
	}
}
*/

。。

//恢复easyclick默认js调用java
importClass(com.gibb.view.Java2Js);
webView.addJavascriptInterface(new Java2Js(), "ec");

//页面程现
var activity=ui.getActivity();
activity.setContentView(webView);
webView.loadUrl("http://play.freebasic.cn/x_load.php");

清理数据,根据需要选

/*
importClass(android.webkit.WebStorage);
WebStorage.getInstance().deleteAllData(); //清空WebView的localStorage
ui.getContext().getCacheDir().delete();
webView.clearCache(true); //缓存文件
webView.clearHistory(); //访问历史
webView.clearFormData(); //表单文件
ui.getContext().deleteDatabase("webviewCache.db");
ui.getContext().deleteDatabase("webview.db");
*/

其它一些跨域的研究

如果是网页跨域,简单来说 当 shouldInterceptRequest 事件发生进行处理

获取到url,然后通过jsonp、okhttp、httpclient等等你能想到的后台访问获得源码以后,然后转交给 WebResourceResponse

// 半成品,研究中
function CrossOrigin(){
	var formatter = new SimpleDateFormat("E, dd MMM yyyy kk:mm:ss", Locale.US);
	var dateString = formatter.format(new Date());
	var headers = new HashMap();
	headers.put("Connection", "close");
	headers.put("Content-Type", "text/plain");
	headers.put("Date", dateString + " GMT");
	headers.put("Access-Control-Allow-Origin", "*");
	headers.put("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT, OPTIONS");
	headers.put("Access-Control-Max-Age", "600");
	headers.put("Access-Control-Allow-Credentials", "true");
	headers.put("Access-Control-Allow-Headers", "accept, authorization, Content-Type");
	headers.put("Via", "1.1 vegur");
	var options=new WebResourceResponse("text/html", "UTF-8", 200, "OK", headers, null);
	return options;
}
var wvClient = android.webkit.WebViewClient;
var mWebViewClient = new JavaAdapter(wvClient, {
	shouldInterceptRequest: function (view, request) {
		//logd('替换OPTIONS:'+request.getRequestHeaders());
		try{
			if (request.getMethod().equalsIgnoreCase("OPTIONS")) {
				return CrossOrigin();
			}
			if(request.getUrl().toString().toLowerCase().contains(".mp3")){
				//view.loadUrl(request.getUrl());
				//okhttp request
			}
			return null;
		}catch(e){

		}
	},
});

。。

关于调用浏览器默认插件

https://chrome.google.com/webstore/detail/cors-freeiptv/fickmiiogfnojlhegfhkilcpefoophgi

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注