首页 > 解决方案 > 在 Android 上加载某些 URL 时,WebView 不显示任何内容

问题描述

我在 Android 上有一个使用 WebView 的演示。这是我的代码:

public class AuthPortalActivity extends Activity {

    WebView authPortalWebview;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.auth_portal_activity);

        authPortalWebview = (WebView) findViewById(R.id.auth_portal_webview);

        authPortalWebview.setWebViewClient(new WebViewPortal());
        openProvisioningPortal();
    }

    private void openProvisioningPortal() {
        authPortalWebview.getSettings().setLoadsImagesAutomatically(true);
        authPortalWebview.getSettings().setJavaScriptEnabled(true);
        authPortalWebview.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
        authPortalWebview.loadUrl("https://example.com");
    }

}

class WebViewPortal extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        Log.d("TAG", "shouldOverrideUrlLoading url = " + url);
        return true;
    }

    @Override
    public void onLoadResource(WebView view, String url) {
        super.onLoadResource(view, url);
    }

    @Override
    public void onPageFinished(final WebView view, String url) {
        super.onPageFinished(view, url);
        Log.d("TAG", "onPageFinished");
    }
}

它可以加载一些 URL,如谷歌、Facebook ......但是当我尝试使用我的门户 URL 时,它无法显示任何内容。确定我的门户网站使用“https”,如果我使用 Chrome 之类的浏览器,它也会成功加载...

这是调用加载 URL 和方法onPageFinished后的 WebView 。

在此处输入图像描述

我在我的代码中忘记了什么吗?

标签: androidwebview

解决方案


要么返回falseshouldOverrideUrlLoading继续正常加载 url

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
    Log.d("TAG", "shouldOverrideUrlLoading url = " + url);
    return false;
    //     ^^^^^
}

或者

您有自己的客户端WebViewPortal,因此您还需要加载 url

  @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        Log.d("TAG", "shouldOverrideUrlLoading url = " + url);
        view.loadUrl(url);
        //^^^^^^^^^^^^^^ load the url once you receive web view and link
        return true;
    }

WebViewClient 负责处理请求,并根据 onPageFinish 或 started 等通知进行处理。


推荐阅读