前言

在开发混合app的时候经常会使用webview来加载html,并且还要与js 交互。

下面会介绍一些导致js 不执行的原因

原因

浏览器未开启javascript

使用的js代码有问题,webview不兼容该代码。
1) 第一个坎:WebSettings
     WebSettings webSettings = mWebView.getSettings();
        webSettings.setJavaScriptEnabled(true);
2) 第二个坎: 有物
在运行脚本前,要有document对象,至少得load一个空白页
webView.loadData(“”,"text/html","UTF-8");
3)第三个坎: 异步
如果这么写是没戏的,因为第一个还没执行完呢
webView.loadData(“”,"text/html","UTF-8");
webView.loadUrl("javascript:alert('hello')");
解决这个问题。可以1)从界面按钮调用 2)延时调用。 3)在onPageFinished中调用
   mWebView.setWebViewClient(new MyWebViewClient());
private class MyWebViewClient extends WebViewClient {
        @Override
        public void onPageFinished(WebView webView, String url) {
            webView.loadUrl("javascript:"+script);
        }
    }
4)第四个坎:console/alert
以上三点完成后,js已经可以执行,可是为什么看不到console.log和alert呢?因为这2个要额外实现
mWebView.setWebChromeClient(new MyWebChromeClient());     //optional, for show console and alert 
private class MyWebChromeClient extends WebChromeClient {
        @Override
        public boolean onConsoleMessage(ConsoleMessage cm) {
            Log.d("test", cm.message() + " -- From line "
                    + cm.lineNumber() + " of "
                    + cm.sourceId() );
            return true;
        }
        @Override
        public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
            Toast.makeText(mContext, message, Toast.LENGTH_SHORT).show();
            return true;
        }

    }


以上皆是来自百度

更多相关文章

  1. android组件之Service
  2. Android(安卓)集成TBS浏览文档,不调用手机内部app 查看,在自身查
  3. MVP模式
  4. DialogFragment的使用总结
  5. Android(安卓)NestedScrolling 实战
  6. Android(安卓)Sqlite
  7. 新博andorid 初中级考试评测以及答案-------小林老师出的试卷
  8. onConfigurationChanged
  9. android Service深入详解

随机推荐

  1. Android(安卓)改变AlertDialog的大小
  2. Android(安卓)Gradle 基础认识
  3. android ndk 入门实践
  4. LocationManager Android自动定位使用以
  5. 利用Android的Log 演示一个activity的生
  6. android生命周期
  7. 关于屏幕解锁的实例
  8. android网站汇总
  9. Android(安卓)屏幕滑动事件
  10. Android(安卓)横屏时禁止输入法全屏