我有一个包含许多 facebook“喜欢”按钮的页面,这些按钮使用内联 fbml 技术(与 iframe 相对)嵌入。很简单。页面呈现良好,一切都按预期工作。
然而...
一旦我将xmlns:fb="http://www.facebook.com/2008/fbml"
命名空间声明添加到文档中,我就会注意到 IE 中初始页面呈现时间的急剧下降。仔细检查(使用 ie8 开发人员工具)显示整个 DOM 在页面初始加载后的短时间内似乎一遍又一遍地“刷新”或“回流”。一些进一步的讨论表明,重排的数量显然与<fb:xxx>
文档中的元素数量成正比。
删除 xmlns 声明会使问题消失。
以前有人经历过吗?
更新:
一些进一步的挖掘揭示了一些更多的细节......问题确实是IE正在重新流动页面,包括重新执行任何内联脚本等等。原因似乎不是包含 xmlns 本身,而是按钮本身的 xfbml 呈现。添加 xmlns 只是触发了 xfbml 渲染,没有 xmlns,按钮从一开始就不会渲染。以下标记说明了该问题。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en" xmlns:fb="http://www.facebook.com/2008/fbml">
<head>
<script type="text/javascript">
alert('some inline js');
</script>
</head>
<body>
<div id="fb-root"></div>
<div>
<fb:like href="http://example.local/1" layout="button_count" show_faces="false" width="80" action="like" font="arial" colorscheme="light"></fb:like>
<fb:like href="http://example.local/2" layout="button_count" show_faces="false" width="80" action="like" font="arial" colorscheme="light"></fb:like>
<fb:like href="http://example.local/3" layout="button_count" show_faces="false" width="80" action="like" font="arial" colorscheme="light"></fb:like>
</div>
<script src="http://connect.facebook.net/en_US/all.js#xfbml=1" type="text/javascript"></script>
</body>
</html>
在 ie 中运行时,上面的示例生成 3 个警报,我希望只看到一个。