web-dev-qa-db-ja.com

WebView loadUrlは1回だけ機能します

編集:私はこのプロジェクトに数年前に取り組みましたが、残念ながら、与えられたシナリオで答えが機能しているかどうかを確認できません。

私たちのブログを表示する1つのWebViewで苦労しています。初期化すると、それは正常に動作します。ユーザーはWebView内の別のリンクに移動できます。ブログに戻るには、WebViewの外側に、メインのブログサイトを再度読み込むボタンがあります。

問題は、loadUrlへの2回目の呼び出し後に何も読み込まれないことです。これが私のコードです:

private WebView wv;

        @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

            this.setContentView(R.layout.blog);

    wv = (WebView) findViewById(R.id.blog_webview);
    wv.getSettings().setJavaScriptEnabled(true);
    wv.setWebViewClient(new WebViewClient() {

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon {
            MyLog.logDump("onPageStarted: " + url);
        }

        @Override
        public void onPageFinished(WebView view, String url) {
                            MyLog.logDump("onPageFinished: " + url);
        }
    });

    wv.loadUrl(Constants.BLOG_URL);
}

OnClickListenerによって呼び出される関数は次のとおりです。

    public void reLoadUrl() {
        wv.loadUrl(Constants.BLOG_URL);

}

しかし、onPageFinishedとonPageStartedのログインで、私のwv.loadUrlが呼び出され、正しいURLをロードしていることが示されているにもかかわらず、Webビュー自体のコンテンツは変更されません。私はキャッシュ、履歴、ビューをクリアしようとしました、異なるWebSettingsを試しました、webView.goBack()を使用しようとしました-結果ではありません。また、それらのアイデアは機能しません: Androidでの奇妙なwebview goBackの問題

場合によっては、reLoadUrlが望ましい結果を表示することがありますが、失敗すると、再び動作させることができなくなります。何が起こっているのでしょうか?私はWebViewコードを読み込もうとしましたが、私を助けることができるものを見つけることができませんでした。

追加できる唯一のことは、webViewに大きく依存しているいくつかの広告ネットワークを使用していることです-それらを下げようとしましたが、ライブラリを削除しなかったので、それらが原因ではないかわかりません。

何か案は??

23
Elena

以下の順序で正確に使用します。

   wv.clearCache(true);
   wv.clearView();
   wv.reload();
   wv.loadUrl("about:blank");
   wv.loadData(Constants.BLOG_URL);
9
user1621629

私は最終日かそこらでWebViewを利用したアプリケーションの開発に費やしました。 WebViewへのデータの読み込みにいくつかの問題がありました。

私はこれがうまくいくかどうか完全に確信していませんが、おそらくこのコードを置き換えます:

public void reLoadUrl() {
    wv.loadUrl(Constants.BLOG_URL);

}

このコードで:

public void reLoadUrl(){

    wv.clearView();
    wv.loadUrl(Constants.BLOG_URL);

}

多分あなたはWebViewをクリアすると問題が解決します

8
Javacadabra

使用するたびにWebViewを作成し直してみて、違いがあるかどうかを確認することをお勧めします。

最初に、コンテキスト、レイアウトパラメーター、および親を保存します。

Context context = wb.getContext();
ViewGroup.LayoutParams lp = wv.getLayoutParams();
ViewGroup parent = (ViewGroup)wv.getParent();

次に、読み込みを停止し、ビューを親から削除します。

wv.stopLoading();
parent.removeView(wv);

次に、再作成して追加し直します。

wv = new WebView(context);
parent.addView(wv, lp);

これは、復元する必要がある他のプロパティかもしれませんが、それは一般的な考えです。

3

同じ問題があり、resumeTimers()を呼び出すと問題が解決しました...

2
Tinsel

WebView全体を再初期化し、reLoadUrl()から呼び出すメソッドを作成するだけです。

void loadWebView() {
    wv = (WebView) findViewById(R.id.blog_webview);
    wv.getSettings().setJavaScriptEnabled(true);
    wv.setWebViewClient(new WebViewClient() {

    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon {
        MyLog.logDump("onPageStarted: " + url);
    }

    @Override
    public void onPageFinished(WebView view, String url) {
                        MyLog.logDump("onPageFinished: " + url);
    }
});

wv.loadUrl(Constants.BLOG_URL);
}

public void reLoadUrl() {
   loadWebView();
}
2
bakriOnFire

Web Chromeクライアントを設定してみてください。場合によっては、webviewが適切に機能するためにWeb Chrome Clientのサポートが必要です。

wv.setWebChromeClient(new WebChromeClient());
2
Sagar Waghmare
@override
public void onFormResubmission(WebView view, Message dontResend, Message resend){
   resend.sendToTarget();
}
2
Nagaraja

前に空白のページをロードしてみてください:

wv.loadUrl("about:blank");
wv.clearHistory();
wv.clearView();
wv.loadUrl(Constants.BLOG_URL);

編集:これも私がこれで問題があったので私が以前に使用したコードです、試してみてください。

2
Elad92

私は同じ問題に直面しており、次の手順で機能します:

webView.clearCache(true);
webView.loadUrl("Url");

そして、私は複数のURLを正常にロードしました。

1
Brijesh Thakur

私は同じ問題に直面し、ようやくこれを解決することができました。Androidこれは良いか悪いかわからないですが、私にとってはうまくいきます。ウェブビューからキャッチをクリアして破棄するだけです。別のURLを再ロードする前に再作成します。

mWebView.clearCache(true);
// destroy before reload new url
parentView.removeView(mWebView);
mWebView.clearHistory();    
mWebView.destroy();

ただし、mWebView.destroy();エラー「Java.lang.Throwable:Error:WebView.destroy()が呼び出されたまま呼び出されました!」を生成するそして私はそれを検索しますが、解決策は得られず、多くの人が今までアプリケーションに影響を与えないと言っています(私はまだこのN.Bを解決することを知りません:私はWebChromeClientを使用しています)。

私は同じ問題に直面していました。毎回新しいWebviewを作成していました。新しいWebViewを作成する前に、まず以前のWebViewを破棄してください。これがお役に立てば幸いです!! WebViewをグローバル変数にします。お気に入り -

Webview w;

次に、新しいWebViewを作成する前に、以前のWebViewを破棄します

                if(null != w)
                {
                    //destroy the previous webview, before creating the new one
                    w.destroy();
                }
                w= new WebView(activity);
0
Agr1909

onPause()でこのメソッドを呼び出します

 private void pauseWebView() {
            try {
                Class.forName("Android.webkit.WebView")
                        .getMethod("onPause", (Class[]) null)
                        .invoke(webview, (Object[]) null);

            } catch(ClassNotFoundException cnfe) {

            } catch(NoSuchMethodException nsme) {

            } catch(InvocationTargetException ite) {

            } catch (IllegalAccessException iae) {

            }
        }
0
Dhaiyur

onCreateでは、wv.loadUrl(Constants.BLOG_URL);を使用する代わりに、wv.loadDataWithBaseURL(baseUrl, readFileAsString("index.html") , mimeType, "UTF-8", null);を使用するだけです

0
AshuKingSharma

私は同じ問題に直面し、上記の解決策のどれも私にとってうまくいきませんでした。そこで、次のようにJavaScriptを使用してWebViewをリロードすることで修正しました。

webView.loadUrl( "javascript:window.location.reload( true )" );

また、JavaScriptをWebViewに対して有効にする必要があります。

webView.getSettings().setJavaScriptEnabled(true);
0
N-JOY