网站在其他浏览器上加载,但 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();
}
}
}
我有一个简单的静态个人测试站点,带有适当的 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();
}
}
}