3

类似问题: JavaScript 在 ICS 上不起作用

我正在开发一个向用户显示一些代码示例的 Android 应用程序。所以,我在 WebView 中使用 google-code-prettify 来突出显示语法。但是,问题是,js 不能单独在 ICS(冰淇淋三明治)上工作。它可以在除 4.0.x 之外的所有其他 Android 版本(2.2+)上完美运行。这是我正在使用的代码。

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");

我从 logcat 得到的唯一类似错误的消息是UNKNOWN CHROMIUM ERROR: -6

任何帮助都会很棒。提前致谢。

4

1 回答 1

3

没有找到任何合适的解决方案。所以,我最终遵循了MoshErsan的建议,如此所述:

这就是我所做的:

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 有效。

于 2013-09-20T16:33:59.853 回答