0

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

经过几个小时的谷歌搜索后,我什至无法找到任何与此非常接近的东西。尽管我只在 Android Galaxy s2 和 iPad 2 上进行了测试,但我无法在其他移动设备上复制该问题。

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

这是我录制的关于该问题的视频(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 错误或只是一个怪癖,但据我所知,这应该是一个有效的选择器!

4

2 回答 2

0

你为什么不在 w3c http://validator.w3.org/#validate_by_input中验证你的 html有时当 html 出现错误时,一些浏览器会纠正错误而其他浏览器不会。

根据浏览器的不同,javascript 也可以以不同的方式工作。一旦我有一个完美的 jQuery 代码在 fireFox 而不是在 IE 中。错误是我正在获取一个元素的宽度,但最初这个元素没有宽度,所以对于 IE 它是 0,对于 fireFox 它取决于它里面的元素。

尝试在您的 PC 中的 safari 中对其进行测试。

于 2012-09-06T23:49:50.487 回答
0

在 iOS 中,关于“documentElement”的 javascript 函数实现存在问题。使用此代码会破坏您在 iOS 环境中的站点,但我不知道这个问题是在 Oracle 方面还是在 Apple 方面。

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

这已经删除了我在 iOS 中的 HTML 文档中的所有内容,包括 body 标签。

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

document.documentElement.innerHTML

document.body.innerHTML

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

于 2012-09-07T03:48:50.770 回答