2016-06-21 79 views
0

对混淆标题的道歉。

我有一个友好的iframe在其中的网页,并且iframe中包含一个脚本标记。本质上,它看起来像这样:

<iframe src="Javascript:'<div id=\'target\'></div><script src=\'appendStuff.js\'><\/script>'"></iframe> 

appendStuff.js负荷的jQuery上document,然后做类似下面的操作:

doc = document; // the iframe's document 
$('<h1>Loaded!</h1>').appendTo('#target', doc); 

这一切正常。但是,为了修复appendStuff.js中的另一个bug,我们需要移动jQuery并将其加载到window.top.document上,而不是在iframe中的document

现在,.appendTo('#target', doc)调用静静地失败,没有任何东西被追加。

这是令人难以置信的混淆,因为只选择$('#target', doc)似乎工作得很好。

有谁知道这是否真的被打破,如果我做错了什么,或者有什么办法解决这个问题?

+0

appendTo接收单个参数。可能你需要'$('

加载!

').appendTo($('#target',doc));' –

+0

@AlexKudryashev这是问题!非常感谢。如果你把它写成答案,我会接受它。 – Mordred

回答

0

jQuery在文档准备就绪。当你说“修复appendStuff.js中的另一个bug”时,我的第一个猜测是,那些代码试图在文档准备好之前运行,因此在jQuery本身被加载之前就有问题了。当你尝试手动选择$('#target',doc) - 在控制台中,我认为 - 你在页面加载完成后做这件事,因此在文档准备就绪后。

所以首先看看你的appendStuff.js。猜测,你应该用$(function(){...})包装它;以解决您的加载顺序问题。你也应该看看How can I detect whether an iframe is loaded?How to check if iframe is loaded or it has a content?,因为它听起来像你真的应该拥有所有这些父母的逻辑,而不是将它锁在iframe中。

+0

不幸的是,没有问题。所有东西都已经打包好等待文档准备就绪。是的,我在控制台中测试了这些代码,但它在实际源代码的下一行也可以正常工作。显然,如果我可以放在那里,它将全部放在父项中,但appendStuff.js实际上是由其他网站加载的,并且通常是在iframe中加载,这是我们现在处于的状态。我也会用这些信息更新我的问题。 – Mordred

相关问题