web-dev-qa-db-ja.com

ローカルHTMLファイルからのWebView Javascriptクロスドメイン

ローカルのhtmlファイルを(アセットフォルダーから)アプリWebViewにロードします。 HTMLでは、jQuery.getJSON(url)を実行します。 URLはリモートサーバーです。

このアクションは失敗し、Originの問題(ドメイン間)が異なるために推測しています。同じファイルをchromeで実行すると、そこに具体的に記述されています。

AndroidのWebViewがローカルにロードされたHTMLファイルのリモートサーバーからデータをロードできるようにする方法はありますか?

28
oriharel

今日の朝、私は働いているように見える解決策を見つけました。

Java部分

WebViewの初期化:

WebView _webView = (WebView) this.findViewById(R.id.id_of_your_webview_in_layout);

WebView設定を取得:

WebSettings settings = _webView.getSettings();

次の設定を設定します:

settings.setJavaScriptEnabled(true);
settings.setAllowFileAccessFromFileURLs(true); //Maybe you don't need this rule
settings.setAllowUniversalAccessFromFileURLs(true);

これで、標準的な方法でHTMLファイルをロードできます:

_webView.loadUrl("file:///Android_asset/www/index.html");

JavaScript部分

標準的な方法でXHRリクエストを作成

var xhr = new XMLHttpRequest();
xhr.open("get", "http://google.com", false);
xhr.send();

結果をどこかに印刷する

document.body.innerHTML = xhr.responseText

注意:この手順は、APIレベル16以上でのみ動作します(少なくともドキュメントにはそれが記載されています)。

53
Stepan Vrany

マニフェストファイルにインターネットアクセス許可を追加することを忘れないでください。

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

また、JSONPリクエストを使用していることを確認してください(上記のように&callback =?を忘れないでください)

2
breez

ローカルのhtmlファイルを(アセットフォルダーから)アプリWebViewにロードします

あなたがこれをどのように行っているかを言っていないことに注意してください。 _file:///Android_asset_ URLのloadUrl()によるものと推測します。

AndroidのWebViewがローカルにロードされたHTMLファイルのリモートサーバーからデータをロードできるようにする方法はありますか?

loadDataWithBaseURL()を使用してコンテンツをロードし、リモートサーバー上のURLをベースURLとして指定してみてください。

0
CommonsWare

使用したソリューションは、Androidを使用してサーバーから更新ファイルを取得し、それらを配置してWebフォルダー内のファイルを上書きしてから参照することでした。

0
Cyberience

Ajax呼び出しは、ローカルファイルシステムからは機能しません。さらに、クロスドメインになります。だからうまくいきません。ローカルサーバーから試したため、Eclipseで機能しました。

0
Prem