android webview 加载URL js不执行的解决方法

作为一个懒者,想做一个简单的apk,把做好的一个简单SPA 页面嵌入webview,是个不错的主意。在使用过程中发现页面的有些js 不执行,下面介绍个人遇到这问题的解决方法及相关知识的记录。

一个加载本地html 文件的例子:

import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebSettings;
import android.webkit.WebView;

public class AActivity extends Activity{
	
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		// 创建WebView
		WebView webView= new WebView(this);
		// 切换到内容视图
		setContentView(webView);
		// 获取WebView配置
		WebSettings ws = webView.getSettings();
		// 启用JavaScript
		ws.setJavaScriptEnabled(true);
		 // 设置允许JS弹窗
		// ws.setJavaScriptCanOpenWindowsAutomatically(true);
		// 在运行脚本前,要有document对象,至少得load一个空白页
		webView.loadData("","text/html","UTF-8");
		// 载入assets目录下的一个页面
		webView.loadUrl("file:///android_asset/www/cow/index.html ");
		// 载入网络的一个页面
		// webView.loadUrl("http://www.baidu.com");
	}
}

让JS 在android webview 里执行很重要的两行代码是:

// 启用JavaScript
ws.setJavaScriptEnabled(true);
// 在运行脚本前,要有document对象,至少得load一个空白页
webView.loadData("","text/html","UTF-8");

这可以让基本的js 脚本运行,如果要运行alert 弹窗,就多加一行:

ws.setJavaScriptCanOpenWindowsAutomatically(true);

自定义出错页面:

mWebView.setWebViewClient(new WebViewClient() { 
      @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
      mWebView.loadUrl("file:///android_asset/error.html");
} });
Relative Articles