Um dies zu erreichen, müssen Sie zwei Dinge implementieren.
1) eine Möglichkeit, die Ajax-Antwort abzufangen und zwischenzuspeichern. 2) eine Möglichkeit, das zwischengespeicherte Ergebnis bei einer Ajax-Anfrage zu liefern.
Teil # 1 Sie können ein JavascriptInterface und jQuery verwenden, um die AJAX-Antwort abzufangen. Schauen Sie sich here für ein Beispiel an, wie man das JavascriptInterface benutzt. Danach können Sie die Antwort zwischenspeichern
Teil 2 (oder 1 & 2) Sie können den zwischengespeicherten Inhalt mit der Methode sentInterceptRequest von WebViewClient bereitstellen. Schauen Sie sich here für ein Beispiel an. In diesem Beispiel können Sie # part 1 kombinieren und einen Netzwerkaufruf tätigen, um die Ajax-Antwort manuell abzurufen.
Hier ist ein Beispiel, mit dem Sie arbeiten können.
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
Log.i(TAG,"shouldInterceptRequest path:"+request.getUrl().getPath());
WebResourceResponse returnResponse = null;
if (request.getUrl().getPath().startsWith("/cart")) { // only interested in /cart requests
returnResponse = super.shouldInterceptRequest(view, request);
Log.i(TAG,"cart AJAX call - doing okRequest");
Request okRequest = new Request.Builder()
.url(request.getUrl().toString())
.post(null)
.build();
try {
Response okResponse = app.getOkHttpClient().newCall(okRequest).execute();
if (okResponse!=null) {
int statusCode = okResponse.code();
String encoding = "UTF-8";
String mimeType = "application/json";
String reasonPhrase = "OK";
Map<String,String> responseHeaders = new HashMap<String,String>();
if (okResponse.headers()!=null) {
if (okResponse.headers().size()>0) {
for (int i = 0; i < okResponse.headers().size(); i++) {
String key = okResponse.headers().name(i);
String value = okResponse.headers().value(i);
responseHeaders.put(key, value);
if (key.toLowerCase().contains("x-cart-itemcount")) {
Log.i(TAG,"setting cart item count");
app.setCartItemsCount(Integer.parseInt(value));
}
}
}
}
InputStream data = new ByteArrayInputStream(okResponse.body().string().getBytes(StandardCharsets.UTF_8));
Log.i(TAG, "okResponse code:" + okResponse.code());
returnResponse = new WebResourceResponse(mimeType,encoding,statusCode,reasonPhrase,responseHeaders,data);
} else {
Log.w(TAG,"okResponse fail");
}
} catch (IOException e) {
e.printStackTrace();
}
}
return returnResponse;
}
oh schön .... klingt wie es funktioniert Ich werde es später versuchen, und wenn es funktioniert, werden Sie belohnt :) PS die "Part # 1" Lösung ist, wie man Ajax Anrufe von der App in der Webansicht und um Feedback zu erhalten, wenn es beginnt und wenn es endet ... die "Part # 2" -Lösung klingt wie die richtige Antwort, so dass Sie die Zitate aus dem Code zur vollständigen Antwort senden können Dank –
Ich habe es fast geschafft arbeite so, dass ich dir das Kopfgeld gebe, weil es bald ausläuft und sobald ich das Loch-Ding fertig habe, werde ich die komplette Lösung posten –