我有一个Android应用程序,我正在使用在android 2.3.3上运行的模拟器开发,嵌入式WebView在嵌套在linearlayout(垂直)的framelayout中。无论我使用什么代码,它实际上从未做过任何事情。我有Android应用程序设置为INTERNET的权限。 即使在尝试加载HTML代码时也是如此。我得到一个空白的白页,没有任何错误。在logcat中也没有。
WebView wview = (WebView)findViewById(R.id.webView1);
wview.getSettings().setJavaScriptEnabled(true);
我已经尝试了所有这三个尝试将任何内容加载到webview中:
wview.loadUrl("http://www.google.com");
wview.loadData("<HTML><BODY><H3>Test</H3></BODY></HTML>","text/html","utf-8");
wview.loadDataWithBaseURL(null, "<HTML><BODY><H3>Test</H3></BODY></HTML>","text/html","utf-8",null);
这三个都给了我相同的结果。什么都没有。
有什么想法吗?
答案 0 :(得分:26)
wbView.getSettings().setDomStorageEnabled(true);
答案 1 :(得分:12)
可能有点太晚了,但我想与你分享我的经验,因为我遇到了同样的问题并花了很多时间。
将您的WebView
放入 RelativeLayout
,而不是 FrameLayout
。
我测试的内容:我的WebView
onPageFinished()
每次都被调用,但在屏幕上我得到了空白页。从chrome://inspect
WebView
调试器我能够&#34; ping&#34;按WebView
按钮inspect
,之后WebView
立即刷新。我的想法 - WebView
未在FrameLayout
中正确呈现,RelativeLayout
修正了问题(即使invalidate()
和requestLayout()
来电也没有帮助)。
答案 2 :(得分:11)
我想如果你编辑了一些代码,那就没关系了。看看我在下面的例子中是怎么做的。以这种方式为你试试..
用于显示网页
final WebView wbView = (WebView) findViewById(R.id.WebView);
wbView.getSettings().setJavaScriptEnabled(true);
wbView.loadUrl("https://play.google.com/store/apps");
wbView.clearView();
wbView.measure(100, 100);
wbView.getSettings().setUseWideViewPort(true);
wbView.getSettings().setLoadWithOverviewMode(true);
用于显示HTML:
请参阅本教程..
答案 3 :(得分:4)
我给了+1,因为这些都是使webview正常工作的有效帮助,但它不是我的问题的解决方案。
我没有意识到我在webview布局的包含上有一个wrap_content,这导致它的高度为0px。通过将此设置为fill_parent我解决了问题。 (带有白色背景的Webview和带有白色背景的应用程序,当它在布局设计器中显示为全高时,您无法确切地告诉它不是全高度。)
感谢您的帮助!
答案 4 :(得分:4)
clearView
已被弃用。
使用:
webView.loadUrl("about:blank")
答案 5 :(得分:3)
而不是传递null,您应该将空String
传递给它。例如:""
所以你应该这样称呼它:
wview.loadDataWithBaseURL("", "<HTML><BODY><H3>Test</H3></BODY></HTML>","text/html","utf-8","");
答案 6 :(得分:2)
在webview布局中将wrap_content更改为fill_parent。它对我有用
答案 7 :(得分:1)
我认为您需要的是WebViewClient。设置webviewclient后调用webview.loadUrl(_url); 有点喜欢这个......
private void loadUrlInWebView(String _URL){
WebView myWebView = (WebView) findViewById(R.id.webviewer);
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setUseWideViewPort(true);
webSettings.setLoadWithOverviewMode(true);
myWebView.setWebViewClient(new MyWebViewClient());
myWebView.loadUrl(_URL);
}
private class MyWebViewClient extends WebViewClient{
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
Toast.makeText(activity, "Oh no! " + description, Toast.LENGTH_SHORT).show();
}
}
答案 8 :(得分:1)
如果仍然无法正常运行,请尝试在网址之前添加“ http://” 或“ https://” ,它应该可以正常工作。
答案 9 :(得分:0)
您可以使用以下代码,这将有所帮助:
WebView myWebView = (WebView) findViewById(R.id.webview);
myWebView.setWebViewClient(new MyWebViewClient());
private class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (Uri.parse(url).getHost().equals("www.example.com")) {
// This is my web site, so do not override; let my WebView load the page
return false;
}
// Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return true;
}
}
答案 10 :(得分:0)
尝试为您的模拟设备增加 RAM 。这解决了我的问题。
我通过查看Android Monitor(Android Studio)中的logcat消息找到了这个。下面的消息让我了解了增加 RAM :
的错误W/art: Throwing OutOfMemoryError "Failed to allocate a 6635532 byte allocation with 1170528 free bytes and 1143KB until OOM"
W/JavaBrowserViewRendererHelper: Error allocating bitmap
E/chromium: [ERROR:java_browser_view_renderer_helper.cc(132)] Error unlocking java bitmap pixels.
答案 11 :(得分:0)
我的Web视图在其顶部显示白色空白方块,有时完全空白。这仅在加载某些数据时发生。
将其更改为 RelativeLayout ,并将layout_height设置为 match_parent 对我来说很有效。
<RelativeLayout xmlns:android=...
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:id="@+id/ll_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginTop="3dp"
android:gravity="center_vertical"
android:orientation="horizontal">
.....
</RelativeLayout>
<WebView
android:id="@+id/web_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/ll_title"
android:background="@color/colorYellow" />
<ProgressBar
android:id="@+id/pb_spinning"
style="?android:attr/progressBarStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:visibility="gone" />
</RelativeLayout>
答案 12 :(得分:0)
使用IP地址代替Web网址,然后使用以下ssl错误处理方法来覆盖webclient
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed(); // Ignore SSL certificate errors
}
答案 13 :(得分:0)
在我的情况下,这是由于我的Web视图试图使用HTTPS加载证书不受信任的页面。
您可以使用以下代码段检查代码中是否存在这种情况:
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed();
}
Java
override fun onReceivedSslError(view: WebView?, handler: SslErrorHandler?, error: SslError?) {
handler?.proceed()
}
科特林
然后,如果是这种情况,请快速删除该代码段并参考the documentation进一步诊断问题,并可能将证书添加到您的密钥库中。