gpt4 book ai didi

internet-explorer - 为什么 ie 在遇到 fbml elements when correctly using the fbml xmlns? 时显然会回流 DOM

转载 作者:行者123 更新时间:2023-12-04 02:21:48 25 4
gpt4 key购买 nike

我有一个页面,其中包含许多使用内联 fbml 技术(而不是 iframe)嵌入的 Facebook“赞”按钮。足够简单。页面呈现良好,一切正常。

然而...

一旦我添加了 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 个警报,我希望只看到一个。

最佳答案

您似乎正在体验 facebook bug 9777 .从新的 all.js 开始,它就一直存在。我认为已经有几次尝试修复它,但并没有真正奏效。看起来优先级上周刚刚被提升了一个档次。让我们看看它是否会很快得到修复。

在任何情况下,您看到的问题都不是由 DOM 树被修改引起的。事实上,被触发的 javascript 甚至不在您的页面中......就是您的“顶级”页面。

该脚本位于由 facebook 脚本创建的 iframe 中,代替您的 fb:like元素。

如果您的 alert 而不是“一些内联 js”显示以下内容:

alert("This: " + window.location.href + "\nTop: " + window.top.location.href);

你会看到它来自哪里。在“此”网址中,您会看到 fb_xd_fragment以及附加到您的 url 的一大堆参数。基本上,facebook 脚本将每个 iframe 窗口重定向到您看到的 URL,这将启动您的脚本。

http://developers.facebook.com/docs/reference/javascript/FB.init/他们讨论自定义 channel URL ( channelURL ) init 参数作为一种解决方法,这似乎对很多人不起作用。许多人在他们作为 channelURL 提供的路径上收到请求泛滥。

只是一个想法......您是否尝试过使用 iframe 方法加载“喜欢”按钮?那是不是更快了?

否则你可以尝试延迟加载 all.js 脚本......
(function() {
var e = document.createElement('script');
e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js#xfbml=1';
e.async = true;
document.getElementById('fb-root').appendChild(e);
}());

关于internet-explorer - 为什么 ie 在遇到 <fb :xxx> fbml elements when correctly using the fbml xmlns? 时显然会回流 DOM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5882766/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com