在定位Android API 19时,JavaScript CSS覆盖无效

时间:2014-03-06 21:42:34

标签: java javascript android webview

我正在使用以下代码

view.loadUrl("javascript:var con = document.getElementsByTagName('img'); for (var i = 0; i < con.length; ++i)con[i].style.maxWidth='100%'; ");

如果我的目标是API 18,它可以正常运行,但是如果我定位最新版本的Android,API 19,它会清除我尝试加载的整个网站,并将其替换为“100%”的文本。 Kit Kat为什么要这样做?

2 个答案:

答案 0 :(得分:1)

WebViews在KitKat中处理javascript的方式发生了重大变化。您不应再通过loadUrl()方法加载javascript。而是使用新的evaluateJavascript()方法:

    view.evaluateJavascript(
            "var con = document.getElementsByTagName('img'); " +
            "for (var i = 0; i < con.length; ++i)con[i].style.maxWidth='100%';",
            null);

答案 1 :(得分:0)

我以前的建议不正确;所以清除它以免误导,并在其中添加一些额外的相关讨论,这可能实际上有助于未来的人: - )

Krylez是正确的 - 使用evaluateJavaScript API来避免此问题。但是,如果您将目标SDK设置为&lt;将自动修复此问题。 19并继续使用遗留loadUrl方法和javascript:网址。一旦你开始瞄准19或以上,你应该切换到evaluateJavaScript

供参考,以下是执行修正的代码:http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.4.2_r1/com/android/webview/chromium/WebViewChromium.java?av=f#499