小编Ber*_*nos的帖子

为什么在正确使用fbml xmlns时遇到<fb:xxx> fbml元素时ie显然会重排DOM?

我有一个包含许多facebook"Like"按钮的页面,使用内联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>
Run Code Online (Sandbox Code Playgroud)

当在ie中运行时,上面的示例生成3个警报,我希望只看到一个.

internet-explorer xml-namespaces repaint reflow fbml

11
推荐指数
1
解决办法
1456
查看次数