$未在iFrame中定义

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

这可能是因为main.php和iframe.php都使用了

 

如果是这样,如何在iframe页面中使用jquery而不包括此行?

我想到了。 在我使用的iFrame中

 var $ = parent.$; 

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

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

这很奇怪,因为我拥有它的原始方式(两个页面都包含jquery)在Safari for Mac中运行良好但在Firefox中它给了我错误

错误:c.defaultView.getComputedStyle(h,null)为null源文件: http ://code.jquery.com/jquery-latest.pack.js行:16

我在网页上加载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

希望它可以帮到某人。

坏消息 – 你不能使用Jquery,除非它在文档中。 所以,无论如何你都要加载它。

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

iFrames的经验法则…将它们视为页面内的单独页面。 是的,在某些情况下,事情会延续,但文档原始模型会阻止CSS之类的内容在父级和子级之间交叉。

升级到更新的版本fe https://code.jquery.com/jquery-2.1.3.min.js