5

私のネイティブ アプリには WebView が含まれており、WebView は Web から Web ページを読み込みます。たとえば、html は次の場所からロードされます。

http://dongshengcn.com/test.html

(ローカルではなく) Web からロードされたページは、ローカル デバイスからファイルをロードできないようです。

私の質問は:

http://dongsheng.com/test.htmlを Web ビューに (ネイティブ アプリの一部として) ロードして、ローカル デバイス上のファイルにアクセスすることは可能ですか?

4

1 に答える 1

5

いくつかのことを試してみてください。

  1. ローカル ファイルを使用するには、それらをプロジェクトのアセット フォルダーに配置し、file:///android_asset/ などの URL を使用して呼び出す必要があります。たとえば、assets フォルダーに mypage.html を追加すると、webview で file:///android_asset/mypage.html を使用して呼び出すことができます。

  2. マニフェストに適切な webview 権限があることを確認してください。WebView が正しく機能するには、次のものが必要です。

    <uses-permission android:name="android.permission.INTERNET" />

  3. Github で次のアプリを見てみましょう。おまけとして、Honeycomb と ICS の webview に関するいくつかのバグも修正されています。これは、ローカル ファイルで webview を使用する方法の完全な例です: https://github.com/bricolsoftconsulting/WebViewIssue17535FixDemo

編集:質問の明確化後の補遺:

はい、Web からローカル ページを読み込むことは可能ですが、ブラウザのセキュリティ対策をバイパスするトリックを使用する必要があります。

URL の file://android_asset/ 部分をカスタム スキームに置き換え (例: file///android_asset/mypage.html は myscheme:///mypage.html になります)、これらのカスタム スキーム URL をページに配置します。WebViewClient のshouldOverrideUrlLoadingを実装し、URL がカスタム スキームで始まるかどうかを確認し、そうであれば webview.loadUrl を使用してローカル ページにリダイレクトします。

    mWebView.setWebViewClient(新しい WebViewClient()  
    {  
        @オーバーライド  
        public boolean shouldOverrideUrlLoading(WebView view, String url)  
        {  
            if (url != null && url.startsWith("myscheme://"))  
            {  
                String newUrl = url.replace("myscheme://", "file://android_asset/");  
                mWebView.loadUrl(newUrl);  
                true を返します。  
            }  
            false を返します。  
        }  
    }  
于 2012-05-16T17:43:34.293 に答える