Android项目中加载本地的html代码,将服务端返回的动态js替换后,在加载,js未执行。
查找原因过程中发现,使用webView的loadData方法加载后,具体的执行代码如下,对应的js未执行。
@Override public void loadData(String data, String mimeType, String encoding) { data = setLineHeight(data); super.loadData(data, mimeType, encoding); }
/** * 设置内文行高,并去除WebView默认外边框边距 */ private String setLineHeight(String content) { String strUrl = "<html style=\"color: " + defaultFontColor + ";fontSize:" + defaultFontSize + "\"> \n" + "<head> \n" + // "<style type=\"text/css\"> \n" + // "body {text-align:justify; font-size: 14px; line-height: 10px;}\n" + // "</style> \n" + "</head> \n" + "<body style=\"color: " + defaultFontColor + ";fontSize:" + defaultFontSize + ";margin:0;padding:0" + "\">" + content + "</body> \n </html>"; return strUrl; }
经过反复尝试及查找问题,使用webview另外的加载html代码的方式后,js正常执行,解决方法如下。
@Override public void loadData(String data, String mimeType, String encoding) { data = setLineHeight(data); super.loadData(data, mimeType, encoding); //解决Android webView加载html代码 不执行js方法的问题 loadDataWithBaseURL(null,data, "text/html; charset=UTF-8", "utf-8",null); }
小记:加载本地html时,建议使用loadDataWithBaseURL方法去加载。