如何修复:当javascript更改DOM时,iOS会删除CSS文件

How to Fix: iOS drops CSS files when javascript changes DOM

本文关键字:iOS 删除 文件 CSS DOM 何修复 javascript 更改      更新时间:2023-09-26

在iOS中,当我使用innerHTML、appendChild和removeChild修改文档时,我遇到了一个持久的问题。我的CSS声明被完全剥离,我得到了页面的无样式版本。

在谷歌上搜索了几个小时后,我再也找不到任何东西了,即使是非常接近这个的东西。虽然我只在安卓Galaxy s2和iPad2上进行了测试,但我无法在其他移动设备上复制这个问题。

我知道这并不是特别的safari,因为我已经在PC上测试了所有主要的浏览器,CSS加载完全正常。这似乎与javascript的iOS实现有关。

这也是我为这个问题录制的视频(2分钟长):
http://www.facebook.com/photo.php?v=4573014247189

编辑:我已经能够在一个实时网站上复制它,使用最低限度来复制行为
http://mlkart.com/ios_bug

编辑:发现问题,目前正在寻找替代方案,发现后将发布解决方案,但iOS中的问题原因如下:

document.documentElement.innerHTML = document.documentElement.innerHTML.replace(oldStuff, newStuff);

最终发生的是,身体标签之外的一切,包括身体标签在内,都被错误地剥离了。这可能是iOS javascript错误,也可能只是一个怪癖,但据我所知,这应该是一个有效的选择器!

为什么不在w3c中验证htmlhttp://validator.w3.org/#validate_by_input有时,当html出现错误时,一些浏览器会更正错误,而另一些则不会。

javascript也可以根据浏览器的不同以不同的方式工作。有一次,我在fireFox中有一个jQuery代码,但在IE中没有。错误是我取了一个元素的宽度,但最初这个元素没有宽度,所以对于IE来说是0,对于fireFox来说,这取决于其中的元素。

试着在你的电脑上进行safari测试。

在iOS中,关于"documentElement"的javascript函数实现存在问题。在iOS环境中使用此代码会破坏您的网站,但我不知道这个问题是甲骨文的还是苹果的。

document.documentElement.innerHTML = document.documentElement.innerHTML.replace(oldStuff, newStuff);

这已经删除了iOS中HTML文档中的body标记之外的所有内容。

我接受的解决方案是更换所有出现的

document.documentElement.innerHTML

带有

document.body.innerHTML

解决方案经过测试,似乎在我可以访问的所有现代可用测试途径中都能正常工作。