mirror of
https://github.com/apache/cordova-android.git
synced 2025-01-20 07:52:53 +08:00
Add Android 4.0 workaround for links with params
Android 4.0.x has a known bug [1] while accessing local files with params: file://file.html?param=2 This commit adds a workaround for this problem by removing the params part of the local URI before accessing the file. [1] http://code.google.com/p/android/issues/detail?id=17535
This commit is contained in:
parent
fc50a0d954
commit
45680a562e
@ -307,4 +307,40 @@ public class CordovaWebViewClient extends WebViewClient {
|
|||||||
this.ctx.pushUrl(url);
|
this.ctx.pushUrl(url);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
|
||||||
|
if(url.contains("?")){
|
||||||
|
return generateWebResourceResponse(url);
|
||||||
|
} else {
|
||||||
|
return super.shouldInterceptRequest(view, url);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private WebResourceResponse generateWebResourceResponse(String url) {
|
||||||
|
final String ANDROID_ASSET = "file:///android_asset/";
|
||||||
|
if (url.startsWith(ANDROID_ASSET)) {
|
||||||
|
String niceUrl = url;
|
||||||
|
niceUrl = url.replaceFirst(ANDROID_ASSET, "");
|
||||||
|
if(niceUrl.contains("?")){
|
||||||
|
niceUrl = niceUrl.split("\\?")[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
String mimetype = null;
|
||||||
|
if(niceUrl.endsWith(".html")){
|
||||||
|
mimetype = "text/html";
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
AssetManager assets = ctx.getAssets();
|
||||||
|
Uri uri = Uri.parse(niceUrl);
|
||||||
|
InputStream stream = assets.open(uri.getPath(), AssetManager.ACCESS_STREAMING);
|
||||||
|
WebResourceResponse response = new WebResourceResponse(mimetype, "UTF-8", stream);
|
||||||
|
return response;
|
||||||
|
} catch (IOException e) {
|
||||||
|
Log.e("generateWebResourceResponse", e.getMessage(), e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user