Javascript 仅在父窗口中包含jQuery库

Javascript 仅在父窗口中包含jQuery库,javascript,jquery,Javascript,Jquery,当jQuery库仅包含在父窗口中时,是否可以从iframe访问它?我有一个父窗口,可以加载(有时是数百个)iFrame。在每个iframe中,我想执行一些jQuery函数。只有在每个iframe中使用以下方法定义lib,我才能使其正常工作: <script src="/jquery.min.js" type="text/javascript"></script> 我所期望的是,一旦孩子的医生“准备好了”,它会把自己缩小到20%。除了它不起作用。是否可能,或者我是否应该尝

当jQuery库仅包含在父窗口中时,是否可以从iframe访问它?我有一个父窗口,可以加载(有时是数百个)iFrame。在每个iframe中,我想执行一些jQuery函数。只有在每个iframe中使用以下方法定义lib,我才能使其正常工作:

<script src="/jquery.min.js" type="text/javascript"></script>
我所期望的是,一旦孩子的医生“准备好了”,它会把自己缩小到20%。除了它不起作用。是否可能,或者我是否应该尝试将子代码添加到父文档,并为每个帧分配ID,然后循环遍历它们

使用 $(文档).ready(函数(){ $('body').css('MozTransform','scale')


结果是父窗口缩小。我想缩小iframe。

在父窗口或顶部窗口中快速运行html代码的开销将超过加载jquery所需的额外脚本行

在每个框架中单独加载它,可能使用jquery的在线版本,这将增加客户端在进入您的站点之前加载库的机会

举例来说

<script src="http://code.jquery.com/jquery-latest.min.js"
        type="text/javascript"></script>

假设
iframe
s与父文档位于同一个域中,您可以轻松获得对父窗口jQuery的引用:

var $ = parent.jQuery;
或者,如果
iframe
s嵌套的深度超过一层:

var $ = top.jQuery;
但是,默认情况下,jQuery将只查询包含它的文档。如果您需要查询给定的
iframe
的DOM,您有两个选项:

传递
document
,在本例中,它指向给定的
iframe
窗口。document
,如下所示:

或者,存储包含
iframe
的文档和
.find()
其子体的jQuery对象

var $dom = $(document);
$dom.find('#elementInsideIframe').doSomething();
现场演示

不管别人怎么说,缓存对于您的用例来说“不够好”。jQuery有相当多的初始化开销,您不想将其包含数百次


根据OP更新:

只需在框架内使用
$(document).ready()
。在(i)框架上下文中,
document
指向给定框架的
窗口。document

另外,如果使用jQuery>=1.8,则不需要使用供应商前缀-如果不支持标准属性,jQuery将使用适当的供应商前缀属性


演示:,

您的浏览器应该自动缓存文件,因此即使您有100个iFrame,也应该从服务器上只加载一次。很难理解在当今这个时代,如果您的域上有100个iFrame,为什么您需要100个iFrame,iFrame的使用案例会变得越来越小。我们发现iFrame有很好的用途。有时您只需要有一种选择,那就是当你知道你在avg编码器领域之外做一些棘手的事情时。我想知道你是否可以改用AJAX…如果你解释一下为什么要使用它们,那会很有帮助。另外,iFrame通常是在普通编码器领域找到的解决方案,而不是在它之上。我们使用iFrame是因为我们我们要做的就是在其中加载一组网站页面。因为每个页面可以使用不同的DOCTYPE标记,所以我们需要将它们放在框架中,这样父文档就不会受到不同标准和样式的影响。此外,我们还利用了新的css缩放功能,这样用户就可以根据需要根据实际内容进行缩放。我认为nk iframes是这里最好也是唯一的解决方案。我们不希望静态缩略图需要定期更新,占用宝贵的空间,让用户不知道页面的真实外观。这正是我一直在寻找的,并且正在成功调用父库。但是,子库中的代码没有按预期执行应为。请参阅“编辑我的问题”。@user1749141将
$(此文档)替换为
$。准备好
(文档)。准备好了
,它就可以工作了。另外,如果您使用的jQuery>=1.8,则不需要添加供应商前缀,所以
.css('transform',value)
也可以。touch。我如何提示您?@user1749141不确定“提示”是什么意思。如果问题解决了,您可以将此答案标记为,如果您需要进一步帮助,您可以问一个新问题并将其链接到我。
=]
嗨,Fab,不确定如何将其链接到您。因此“touch”。我更新了我的问题。你可能对所涉及的额外工作和头痛是正确的。可能只是坚持我们现有的,并希望每个浏览器的缓存通过SSL连接正常工作。关于第三方脚本,如果在A大陆和B大陆之间为某个特定ISP提供海外电缆,该怎么办?我们的网站将停止工作因为我们依赖于另一个站点,所以我们希望所有脚本都驻留在我们的服务器上,因此如果我们的服务器正常,那么站点也正常。那么您最好使用自己的服务器。
$('#elementInsideIframe', document).doSomething();
var $dom = $(document);
$dom.find('#elementInsideIframe').doSomething();