15

我已经在 Dialog Activity 中实现了 WebView,并且正在将简单的 url 加载到 webview 中。

我的 Webview 设置为

wbView = (WebView) findViewById(R.id.wbView);
        wbView.setKeepScreenOn(true);
        wbView.getSettings().setJavaScriptEnabled(true);
        wbView.getSettings().setDomStorageEnabled(true);
        wbView.getSettings().setBuiltInZoomControls(true);
        wbView.setInitialScale(100);
        // wbView.getSettings().setUseWideViewPort(true);
        wbView.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY);
        wbView.setWebViewClient(new MyWebViewClient());

和 MyWebViewClient() 包含

private class MyWebViewClient extends WebViewClient {
        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            prgBar.setVisibility(View.GONE);
        }

        @Override
        public void onReceivedSslError(WebView view, SslErrorHandler handler,
                SslError error) {
            Log.e("Error VAGARO", error.toString());
            prgBar.setVisibility(View.GONE);
            handler.proceed();
        }

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return false;
        }
    }

我在同一个 webview 中从 Asset 加载两个 HTML 文件,它工作正常,但无法加载动态 url。

我谷歌并在http://code.google.com/p/android/issues/detail?id=21177上找到一些帖子

我的 logcat 向我展示

05-09 13:33:30.187: W/webcore(20054): java.lang.Throwable: EventHub.removeMessages(int what = 107) is not supported before the WebViewCore is set up.
05-09 13:33:30.187: W/webcore(20054):   at android.webkit.WebViewCore$EventHub.removeMessages(WebViewCore.java:1683)
05-09 13:33:30.187: W/webcore(20054):   at android.webkit.WebViewCore$EventHub.access$7900(WebViewCore.java:926)
05-09 13:33:30.187: W/webcore(20054):   at android.webkit.WebViewCore.removeMessages(WebViewCore.java:1795)
05-09 13:33:30.187: W/webcore(20054):   at android.webkit.WebView.sendOurVisibleRect(WebView.java:2917)
05-09 13:33:30.187: W/webcore(20054):   at android.webkit.ZoomManager.setZoomScale(ZoomManager.java:593)
05-09 13:33:30.187: W/webcore(20054):   at android.webkit.ZoomManager.access$1700(ZoomManager.java:49)
05-09 13:33:30.187: W/webcore(20054):   at android.webkit.ZoomManager$PostScale.run(ZoomManager.java:984)
05-09 13:33:30.187: W/webcore(20054):   at android.os.Handler.handleCallback(Handler.java:605)
05-09 13:33:30.187: W/webcore(20054):   at android.os.Handler.dispatchMessage(Handler.java:92)
05-09 13:33:30.187: W/webcore(20054):   at android.os.Looper.loop(Looper.java:137)
05-09 13:33:30.187: W/webcore(20054):   at android.app.ActivityThread.main(ActivityThread.java:4424)
05-09 13:33:30.187: W/webcore(20054):   at java.lang.reflect.Method.invokeNative(Native Method)
05-09 13:33:30.187: W/webcore(20054):   at java.lang.reflect.Method.invoke(Method.java:511)
05-09 13:33:30.187: W/webcore(20054):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
05-09 13:33:30.187: W/webcore(20054):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
05-09 13:33:30.187: W/webcore(20054):   at dalvik.system.NativeStart.main(Native Method)

建议我应该做出的改变。

更新

我发现如果我传递任何像“www.facebook.com”这样的网址,那么它会给我这个错误,但如果我用“https://www.facebook.com”替换它,那么它工作正常。

4

5 回答 5

8

我发现的问题是因为 url 没有http://or https://。因此,如果 url 不包含http://or ,我会附加此标签https://

于 2012-05-09T10:04:46.323 回答
5

就我而言,我通过更改顺序来修复它。我将loadUrl放在getSettings()

下面的工作片段之前,

mWebView = (WebView) findViewById(R.id.web_view);

// load file
mWebView.loadUrl(SERVER_URL);
mWebView.getSettings().setJavaScriptEnabled(true);

希望这可以帮助某人..

于 2012-07-27T10:43:45.337 回答
3

在我的 LogCat 的最后几天里,我有时会看到这个堆栈,但直到现在它并没有阻止我的开发。但我怀疑这与我的 WebView 有时所做的挣扎有关。这似乎是一个不仅影响我们的 Bug:


android.webkit.WebViewCore.removeMessages(int):void

1675        private synchronized void removeMessages(int what) {
1676            if (mBlockMessages) {
1677                return;
1678            }
1679            if (what == EventHub.WEBKIT_DRAW) {
1680                mDrawIsScheduled = false;
1681            }
1682            if (mMessages != null) {
1683                Throwable throwable = new Throwable(
1684                        "EventHub.removeMessages(int what = " + what + ") is not supported " +
1685                        "before the WebViewCore is set up.");
1686                Log.w(LOGTAG, Log.getStackTraceString(throwable));
1687            } else {
1688                mHandler.removeMessages(what);
1689            }
1690        }

队列mMessages必须为 NULL 以避免异常。

// Message queue for containing messages before the WebCore thread is ready.

所以这很简单:有些东西导致 WebCore 需要更多的时间来设置。根据 107 是 `SET_SCROLL_OFFSET' 并且堆栈跟踪显示 ZoomManger 我将检查我的代码中的某些内容是否导致视图在启动设置时以某种方式激活。


解答: 如果您调用requestWindowFeature(Window.FEATURE_NO_TITLE)然后等待太长时间调用,则会引发此异常setContentView()。你能等多久我想不通。所以这两个将是onCreate()从现在开始的第一行。如果我是对的,时间会告诉我的。

好消息是这个警告标记webcore只是一个警告,它本身不会对应用程序的其余部分造成影响。

坏消息是,我的问题似乎与它无关,而是来自其他地方。

于 2012-11-06T01:36:41.033 回答
1

该问题通常与指向未找到的 URL 有关。它是 404(即未找到的 URL)。修改网址

于 2012-06-10T16:27:45.063 回答
0

我打电话finish()并重新启动后遇到同样的问题Activity。因此,也许它不能简单地以WebView. 我在完成活动之前做了以下事情并且它有效。

try{
        webView.stopLoading();
        ViewGroup parent = (ViewGroup)webView.getParent();
        parent.removeView(webView);
        webView.destroy();
}catch(Exception e){
        Log.e(TAG, "clear webView fail");
        e.printStackTrace();
}
 finish();
于 2013-04-09T08:23:12.007 回答