Ответ 1
wbView.getSettings().setDomStorageEnabled(true);
У меня есть приложение для Android, которое я разрабатываю с использованием эмулятора, работающего на Android 2.3.3, со встроенным WebView в рамке, вложенной в линейный (вертикальный). Независимо от того, какой код я использую, он никогда ничего не делает. У меня есть разрешения на приложение для 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);
Все три дают мне те же результаты. Ничего.
Есть идеи?
wbView.getSettings().setDomStorageEnabled(true);
Это может быть слишком поздно, но я хотел поделиться своим опытом с вами, потому что у меня была такая же проблема и потратил на это много времени.
Поместите свой WebView
в RelativeLayout
а не в FrameLayout
.
То, что я тестировал: мой WebView
onPageFinished()
вызывался каждый раз, но на экране у меня была пустая страница. Из chrome://inspect
отладчик WebView
я смог "ping" моего WebView
, нажав кнопку inspect
, и после этого WebView
мгновенно WebView
. Мои мысли. WebView
не корректно отображается в FrameLayout
, и RelativeLayout
исправляет проблему (даже вызовы invalidate()
и requestLayout()
не помогли).
Я думаю, если вы отредактируете часть своего кода, тогда это будет нормально. Посмотрите, как я это делаю в моем случае ниже. Попробуйте для вас таким образом.
Для отображения веб-страницы
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:
См. Этот учебник..
Я дал +1, потому что это была действительная помощь для правильной работы webview, но это не было решением моей проблемы.
Я не понял, что у меня есть wrap_content при включении моего веб-макета, и это привело к тому, что он имел высоту 0px. Установив это как fill_parent, я решил проблему. (Webview с белым фоном и приложением с белым фоном, вы не можете сказать его не полный рост, когда он отображается как полная высота в дизайнере макета).
Спасибо за вашу помощь!
clearView
устарел.
Использование:
webView.loadUrl("about:blank")
вместо передачи null вам нужно передать пустую String
. ex: ""
Поэтому вы должны называть это следующим образом: wview.loadDataWithBaseURL("", "<HTML><BODY><H3>Test</H3></BODY></HTML>","text/html","utf-8","");
измените wrap_content на fill_parent в макете веб-просмотра. это сработало для меня
Я думаю, что вам нужен 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();
}
}
Если это по-прежнему не работает, попробуйте добавить "http://" или "https://" перед веб-адресом, и он должен работать.
Вы можете использовать следующий код, это будет полезно:
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;
}
}
Попытайтесь увеличить ОЗУ для своего эмулируемого устройства. Это решило проблему для меня.
Я нашел это, посмотрев сообщения logcat в Android Monitor (Android Studio). Ниже приведенные сообщения дали мне представление о том, что было не так, чтобы увеличить оперативную память:
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.
В моем веб-виде сверху был белый пустой квадрат, иногда совершенно пустой. Это происходило только при загрузке определенных данных.
Изменение его на 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>
используйте IP-адрес вместо веб-URL, затем переопределите веб-клиент, используя следующий метод обработки ошибок ssl
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed(); // Ignore SSL certificate errors
}
Я была такая же проблема. И я проверил logcat в андроид студии. В одном из загружаемых сценариев js произошла ошибка.
Ошибка была связана с доступом к локальному хранилищу. И поэтому я исправил это, установив для хранилища DOM значение true.
wbView.getSettings().setDomStorageEnabled(true);