アクティビティの onCreate() メソッドで loadUrl() メソッドを使用して、コンテンツを外部 Web サーバーから Web ビューにロードしています (アドロイド アプリを作成しています)。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.loadUrl("http://server-name/path/to/my/server/app/");
}
サーバーでは、ACCEPT HTTP ヘッダーをチェックして、クライアントに配信するデータ形式を決定します。
問題は、loadUrl() メソッドが常に ACCEPT ヘッダー値「application/xml, ...」を送信しているように見えるため、サーバーが適切にレイアウトされていない html ではないデータを配信することになります (これが webview に必要なものです)。 )、むしろ純粋なxmlとして(これは、たとえば、一部のWebサービスクライアントに適しています)。
したがって、ACCEPT HTTP ヘッダーを「text/html」に設定したいのですが、loadUrl() メソッドではそれができません。
cordova/android のソース コードを調べたところ、(CordovaWebView.java の) loadUrl() メソッドが最終的に (android sdk) WebView の loadUrl() メソッドを呼び出し、追加の http ヘッダーを取得するためにオーバーロードされていることがわかりました。しかし、通常のコルドバの使用では、その loadUrl メソッドにアクセスできません。
そこで、CordovaWebView の loadUrlNow() メソッドを編集しました。このメソッドは、WebView の loadUrl() メソッドを呼び出し、追加のヘッダーをハードコーディングしました。
void loadUrlNow(String url) {
...
Map<String, String> extraHeaders = new HashMap<String, String>();
extraHeaders.put("ACCEPT", "text/html");
super.loadUrl(url, extraHeaders);
}
それをコンパイルし、元の cordova.jar を自分のものに置き換えて、Android アプリを再構築しました。しかし、アプリを起動してサーバー側で ACCEPT HTTP ヘッダーを確認すると、ACCEPT ヘッダーは変更されませんでした。その値は、余分なヘッダーをハードコーディングする前とまったく同じです。そのヘッダーを変更できないようです。
では、loadUrl() メソッドを呼び出すときに ACCEPT http ヘッダーを設定する方法はありますか?