2011-05-13 56 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

希望它可以幫助別人。