2011-05-13 28 views
12

我有一个包含iframe的页面。我的iframe页面是iframe.php和我的主页是main.php当我直接加载iframe.php我的jquery代码执行良好,但是当我加载main.php(其中包含iframe.php作为iframe)时,我得到一个错误“ $未定义“。

难道这是因为这两个main.php和iframe.php使用

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

如果是的话我怎么能在iframe页面使用jquery不包括这条线?

+0

是否有可能在main.php之外的iframe失败了?你有没有试过暂时注释掉框架,看看main.php上的其他代码是否正常工作? – RMorrisey 2011-05-13 03:30:45

+2

我知道有一些javacsript和iFrames与父文档相关的问题...我相信,如果iFrame的源文档与父文档位于同一个域中,那么iFrame会继承父文档的JavaScript,否则它会不。我不知道这是否准确......但我的观点是,当您在iframe文档中摆脱jquery引用时会发生什么? – 2011-05-13 03:30:46

+0

当我注释掉iFrame时,main.php页面没有错误。当我从iframe中删除所有的javascript时,这很奇怪。PHP除了jQuery的包括我得到这个错误错误:c.defaultView.getComputedStyle(h,null)为空 源文件:http://code.jquery.com/jquery-latest.pack.js 行:16 – 2011-05-13 03:38:52

回答

14

我想通了。在我使用的iFrame

var $ = parent.$; 

以及给任何jquery调用上下文的文档。即

$("#element", document).doStuff(); 

这很奇怪,因为原来的办法我只好它(与包含在两个页面的jQuery)在Safari工作正常的Mac,但在Firefox它给我的错误

Error: c.defaultView.getComputedStyle(h, null) is null Source File: http://code.jquery.com/jquery-latest.pack.js Line: 16

+0

不要忘记'接受'这个答案! – 2011-05-14 23:15:48

2

坏消息 - 除非在文档中,否则不能使用Jquery。所以,你不得不加载它。

在两个文档中包含jquery调用实际上并没有什么坏处。我有几个客户为我的公司的营销自动化应用程序(包括它)包含了一部分应用程序,并且还在他们的父文档中包含了Jquery,它工作得很好,没有冲突。从负载的角度来看,假设你设置正确,由于缓存命中将会忽略不计。所以,包括在内。

iFrame上的经验法则......将它们想象成页面内的单独页面。是的,在某些情况下,事情会继续下去,但文档起源模型阻止CSS之类的事情在父母和孩子之间交叉。

2

我被加载的iframe在网页中,我可以找到$ object使用

var $ = parent.$; 

但是这并没有对iFrame的元素进行选择。发现下面的代码对的iFrame体

if (typeof(jQuery) == "undefined") { 
    var iframeBody = document.getElementsByTagName("body")[0]; 
    var jQuery = function (selector) { return parent.jQuery(selector, iframeBody); }; 
    var $ = jQuery; 
} 

不知何故的文档对象也undefined执行选择器。

源的上述代码:https://gist.github.com/843229

希望它可以帮助别人。