2

WebView内で使用しようとしている、既存のWebベースの登録プロセスを備えたアプリがあります。アプリ内のコンテンツをより適切に表示するためにいくつかの要素を非表示にするために、HTMLにいくつかのスタイルタグを追加する必要があります。初期ロードで動作させることはできますが、WebView内のあるページから次のページにそれを実行する方法がわかりません。これが私が働いていることです:

サイトの初期ロード時に、生のhtmlを取得し、"<style>MY STYLES HERE<呼び出す前に文字列に/style>"を追加しています

wv.loadDataWithBaseURL(url, rawHtml, null, "UTF-8", url);

これは完全に機能しますが、ユーザーがページ上のリンクをクリックして別のページをWebViewにロードすると、このコードは呼び出されず、スタイルタグは失われます。

WebViewClientで「shouldOverrideUrlLoading」をオーバーライドする必要があると思いますが、ここからhtmlをインターセプトする方法がわかりません。私は次のようなことを試してみようと思いました:

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
    String rawHtml = getRawHtml(url) + "<style>...</style>";
    wv.loadDataWithBaseURL(url, rawHtml, null, "UTF-8", url);
}

しかし、これは明らかに、新しいロードを開始するためにロードをインターセプトする無限のループにそれを送ります。

また、onPageFinishedをオーバーライドして、次のことを実行してみました。

wv.loadUrl("javascript:(function() { ... })()");

これは機能しますが、ページ全体が読み込まれるまで待機してから実行されます。これにより、ページにすべてのUI要素がそのままロードされたように見え、その後、非表示にしようとしているすべてのUI要素が突然消えます。私の最終的な目標は、モバイルデバイスでのサイトのルックアンドフィールを向上させることであるため、これはオプションではありません。

「shouldOverrideUrlLoading」でスタイルタグを挿入するために他にできることはありますか?または、そうでない場合は、他に何を試すことができますか?

4

1 に答える 1

0

この問題に遭遇しました。リダイレクトの数などによっては、挿入された JavaScript を常に利用できるようにすることができませんでした。

少なくとも、このwv.loadUrl("javascript:(function() { ... })()");アプローチを使用する必要がありますが、onPageStarted() と onPageFinished() の両方で呼び出す必要があります。

ページの複雑さによっては、onLoadResource() にも JavaScript を挿入する必要がある場合があります。

于 2012-09-19T17:11:01.567 に答える