我正在开发一个向用户显示一些代码示例的 Android 应用程序。因此,我在 WebView 中使用 google-code-prettify 进行语法高亮显示。但是,问题是,js 不能单独在 ICS( Ice Cream Sandwich )上工作。它在所有其他 Android 版本 (2.2+) 上完美运行 4.0.x 除外。这是我正在使用的代码。
WebView webView = (WebView) findViewById(R.id.webViewSample);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebChromeClient(new WebChromeClient());
webView.loadUrl("file:///android_asset/code_snippets/sample_java.html");
任何帮助都会很棒。提前致谢。
最佳答案
没有找到任何合适的解决方案..所以,我最终遵循了 MoshErsan 提到的 here 的建议:
这就是我所做的:
WebView webView = (WebView) findViewById(R.id.webView);
webView.setWebViewClient(new WebViewClient(){
@TargetApi(11)
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
Log.d("shouldInterceptRequest", url);
InputStream stream = inputStreamForAndroidResource(url);
if (stream != null) {
return new WebResourceResponse("text/javascript", "utf-8", stream);
}
return super.shouldInterceptRequest(view, url);
}
private InputStream inputStreamForAndroidResource(String url) {
final String ANDROID_ASSET = "file:///android_asset/";
if (url.contains(ANDROID_ASSET)) {
url = url.replaceFirst(ANDROID_ASSET, "");
try {
AssetManager assets = getAssets();
Uri uri = Uri.parse(url);
return assets.open(uri.getPath(), AssetManager.ACCESS_STREAMING);
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
});
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl("file:///android_asset/code_snippets/sample_java.html");
不知道实际问题是什么。但是,这个 hack 有效。
关于JavaScript(存储在 Assets 中)在 ICS( Ice Cream Sandwich )中的 WebView 中不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18799880/