网站在其他浏览器上加载,但 Android Webview 不加载

Site loads on Other Browsers but not Android Webview

我有一个简单的静态个人测试站点,带有适当的 TLS 证书。 Chrome 和 Windows、Linux 和 Android 上的 Firefox 都能正常加载此站点。

但是在 Android Webview 中,由于某些奇怪的原因它没有加载。它只是显示一个空白屏幕,甚至没有错误消息。这是代码,非常基础。

public class MainActivity extends AppCompatActivity {

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

        final WebView mainWv = (WebView) findViewById(R.id.mainWv);
        mainWv.getSettings().setJavaScriptEnabled(true);
        mainWv.loadUrl("https://test.mysite.com:443/");
    }
}

有趣的观察:

事实上,这段代码甚至没有向我的服务器发送请求,这很奇怪。 (我可以访问服务器控制台,它显示没有请求。)


我已经did/tried:

已将 Internet 权限添加到清单中。

使用 WebChromeClient 得到相同的结果。

直接通过 IP 加载得到相同的结果。

不使用端口加载会得到相同的结果。

加载其他网站工作正常,例如mainWv.loadUrl("https://google.com/");.


这个问题太奇怪了,我什至不知道从哪里开始调试。请帮忙。我也想知道您是否在其他物理位置取得了成功。服务器位于圣何塞。


网络视图 运行 模拟 Android 9 (API 28) 和 Google Pixel 3a Android 10 (API 29)

您是否在清单中添加了互联网权限?如果没有添加以下行。

<uses-permission android:name="android.permission.INTERNET"/> 

替换代码:

 public class MainActivity extends AppCompatActivity {



    @SuppressLint("SetJavaScriptEnabled")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);



        WebView webView = findViewById(R.id.webview_compontent);

        webView.getSettings().setJavaScriptEnabled(true);

        WebSettings webSettings = webView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        webSettings.setUseWideViewPort(true);
        webSettings.setLoadWithOverviewMode(true);
        webSettings.setDomStorageEnabled(true);

        webView.setWebViewClient(new WebViewController());
        webView.loadUrl("https://tpc.scheimong.net");



    }
    public class WebViewController extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }

        @Override
        public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) {
            final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
            builder.setMessage("Error");
            builder.setPositiveButton("Continue", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    handler.proceed();
                }
            });
            builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    handler.cancel();
                }
            });
            final AlertDialog dialog = builder.create();
            dialog.show();
        }

    }

}