Android 2.1 模拟器中存在 Javascript 注入问题,但在 2.2 中则正常

发布于 2024-11-06 12:42:02 字数 514 浏览 0 评论 0原文

我正在尝试将一些 CSS 动态注入到加载到 Android WebView 的网页中。

我已经将问题归结为这个 HTML,如果您插入纯 HTML 页面的正文,当您点击“Click me”时,在 Android 2.2 上,当您点击“Click me”时,会向页面上的元素添加红色框,但在 2.1 上失败(当在无论如何,模拟器)。

<a href="javascript:(function() { var style=document.createElement('style');style.type='text/css';style.innerHTML='* { border: 1px solid red; }';document.getElementsByTagName('head').item(0).appendChild(style);})();">Click me.</a>

知道是否有办法让这个 JS 在 Android 2.1 上工作?或者如果它只是模拟器的错误?

谢谢

I'm trying to dynamically inject some CSS into a webpage loaded into an Android WebView.

I've distilled the problem down to this HTML which if you insert into the body of a plain HTML page adds red boxes to the elements on the page on Android 2.2 when you tap "Click me" but fails on 2.1 (when run in the emulator anyway).

<a href="javascript:(function() { var style=document.createElement('style');style.type='text/css';style.innerHTML='* { border: 1px solid red; }';document.getElementsByTagName('head').item(0).appendChild(style);})();">Click me.</a>

Any idea if there is a way I can get this JS to work on Android 2.1? Or if it is an emulator only bug?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

信愁 2024-11-13 12:42:02

我终于找到了解决方案,因此可以回答我自己的问题!

看来 Android 2.1 不喜欢脚本标签的innerHTML。更正确的方法是使用 document.createTextNode() 并且适用于 2.1 和 2.2。

<a href="javascript:(function() { var style=document.createElement('style');style.type='text/css';css = document.createTextNode('* { border: 1px solid red; }');style.appendChild(css);document.getElementsByTagName('head').item(0).appendChild(style);})();">Click me to change all styles</a>

I've finally found a solution and so can answer my own question!

It seems Android 2.1 doesn't like innerHTML for script tags. The more correct way to do this is to use document.createTextNode() and works in both 2.1 and 2.2.

<a href="javascript:(function() { var style=document.createElement('style');style.type='text/css';css = document.createTextNode('* { border: 1px solid red; }');style.appendChild(css);document.getElementsByTagName('head').item(0).appendChild(style);})();">Click me to change all styles</a>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文