public static void loadErrorPage(final AmazonWebView webView, final String desiredURL, final int errorCode) {
final Pair<Integer, Integer> errorResourceIDs = errorDescriptionMap.get(errorCode);
if (errorResourceIDs == null) {
throw new IllegalArgumentException("Cannot load error description for unsupported errorcode=" + errorCode);
}
// This is quite hacky: ideally we'd just load the css file directly using a '<link rel="stylesheet"'.
// However WebView thinks it's still loading the original page, which can be an https:// page.
// If mixed content blocking is enabled (which is probably what we want in Focus), then webkit
// will block file:///android_res/ links from being loaded - which blocks our css from being loaded.
// We could hack around that by enabling mixed content when loading an error page (and reenabling it
// once that's loaded), but doing that correctly and reliably isn't particularly simple. Loading
// the css data and stuffing it into our html is much simpler, especially since we're already doing
// string substitutions.
// As an added bonus: file:/// URIs are broken if the app-ID != app package, see:
// https://code.google.com/p/android/issues/detail?id=211768 (this breaks loading css via file:///
// references when running debug builds, and probably klar too) - which means this wouldn't
// be possible even if we hacked around the mixed content issues.
final String cssString = HtmlLoader.loadResourceFile(webView.getContext(), R.raw.errorpage_style, null);
final Map<String, String> substitutionMap = new ArrayMap<>();
final Resources resources = webView.getContext().getResources();
substitutionMap.put("%page-title%", resources.getString(R.string.errorpage_title));
substitutionMap.put("%button%", resources.getString(R.string.errorpage_refresh));
substitutionMap.put("%messageShort%", resources.getString(errorResourceIDs.first));
substitutionMap.put("%messageLong%", resources.getString(errorResourceIDs.second, desiredURL));
substitutionMap.put("%css%", cssString);
final String errorPage = HtmlLoader.loadResourceFile(webView.getContext(), R.raw.errorpage, substitutionMap);
// We could load the raw html file directly into the webview using a file:///android_res/
// URI - however we'd then need to do some JS hacking to do our String substitutions. Moreover
// we'd have to deal with the mixed-content issues detailed above in that case.
webView.loadDataWithBaseURL(desiredURL, errorPage, "text/html", "UTF8", desiredURL);
}
ErrorPage.java 文件源码
java
阅读 43
收藏 0
点赞 0
评论 0
项目:firefox-tv
作者:
评论列表
文章目录