重新执行创建 iframe 的脚本,当重新将其附加到 Dom(Twitter 小部件)时



我在Twitter小部件时间轴上遇到了问题,但这个问题适用于任何脚本。

我想嵌入Twitter小部件时间轴(最终结果是一个iframe)。似乎添加 iframe 的方法是在帖子中插入一个脚本,该脚本将使用函数调用另一个脚本,然后执行一个函数来加载/创建最终的 iframe。

<script>
!function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0], p = /^http:/.test(d.location) ? 'http' : 'https';
if (!d.getElementById(id)) {
js = d.createElement(s);
js.id = id;
js.src = p + "://platform.twitter.com/widgets.js";
fjs.parentNode.insertBefore(js, fjs);
}
}(document, "script", "twitter-wjs");
</script>

在我的网站上,我有帖子(post1,post2,post3),其中显示了帖子的部分内容。当用户点击其中一个帖子的标题时,部分帖子从 Dom 中移除,完整的帖子被调用到 Ajax 中并附加到 Dom 中。然后,当关闭完全加载的帖子时,其内容将从 Dom 中删除,并再次附加部分帖子内容。(此附加 dettaching 是为了防止与 #ids 发生冲突)。

当我的部分内容再次附加到帖子中时,iframe 为空,脚本不会再次执行以加载它。(即使我制作了一个自定义的哑脚本)。这个空的iframe只发生在Twitter小部件上,而不是其他iframe,如Youtube视频。

有人可以在这里指导我吗?


更新

这里有几件事。 帖子中添加的脚本似乎将推特小部件脚本加载到头部。后脚本在创建 iframe 之前检查此头脚本是否存在。这意味着 iframe 不是在完整 post (ajax) 加载中创建的。我可以删除头脚本,然后在完整帖子中正确创建 iframe。

但是这个"技巧"不适用于重新附加的内容。 问题仍然存在,当我重新附加内容时,后期脚本不会再次运行(任何脚本)。


更新2

对迟钝问题的摆弄 http://jsfiddle.net/KsFJR/

您是否尝试过从 DOM 中完全删除 iFrame 并重新启动脚本?

考虑隐藏/显示您的内容,而不是分离和重新附加。即使听起来您可能需要巧妙地使用您的 ID,也值得重写。

每当在 DOM 中移动它们(包括分离和重新连接)时,iframe都会重新加载它们的内容。 查看相关问题

似乎 Twitter 的脚本并不期望您重新加载iframe的内容,因此与其尝试与之抗争,不如不要管它。隐藏/显示帖子将能够解决此问题,因为这些操作不会修改 DOM。

最新更新