2009-07-16 56 views
1

我試圖通過編程方式在iframe中使用JavaScript代碼關閉一個名爲 的JavaScript代碼模式。這似乎不適用於JavaScript DOM。在iframe中關閉一個帶有iframe的模式框

https://github.com/defunkt/facebox

更一般地,我怎麼會收一個通用模式嵌入的代碼的iframe來關閉它的iframe內。 (扭遺憾的舌頭(或眼))

這裏是我的例子:

我有一個facebox像這樣的東西:

jQuery.facebox("stuff goes here <iframe src="example.php"...." more stuff"); //opens the modal(works great) 

那裏面的iframe,我想打電話給jQuery(document).trigger('close.facebox');。如果我在父頁面或模態頁面上調用它,但不是在實際的iframe中,它似乎工作。有沒有一種方法可以通過在iframe example.php內調用它來關閉它?

編輯:我在問我如何從iframe中使用jQuery訪問父框架以簡化問題。

回答

2

您無法在該彈出頁面內修改「屬於」父頁面的元素。據我所知,你將不得不從父母發出你的隱藏代碼。你總是可以有對話框裏面的代碼做這樣的事情:

parent.$("#dialog").hide(); 

我想這就是你在問什麼......

0

嵌入式iframe指向不同域上的URL是否正確?在這種情況下,否,您不能出於安全原因從iframe內調用父文檔。

+0

不,它是在同一個域:) – 2009-07-16 18:36:38

+0

嗯。那我真的不確定!抱歉。 – 2009-07-16 18:59:22

0

我認爲,你可以使用FancyBox。有一些公共方法可以關閉iframe中的模式對話框,也可以選擇使花式框變爲模式窗口: - 在iframe中使用 - parent。$。fancybox.close();

如果您在同一個域上使用腳本,如果您想使用跨域只需提供使用POST/GET安全地互相調用交換參數/查詢的每個頁面(.php/html等),就沒問題。但要關閉fancybox模式,您必須使用相同的域頁面運行此方法。

希望它適合你斯坦。

1

下面是我工作:

我的頁面有一個DIV內的IFRAME中,DIV是什麼facebox應該淡入淡出和。 iframe的SRC是一個頁面上有一個鏈接,看起來像這樣:

<a href="#" onclick="parent.close_QM_facebox()">close this facebox modal</a> 

在包含DIV和IFRAME(不叫進IFRAME的頁面),我在頁面的HEAD JavaScript函數「close_QM_facebox()」看起來像這樣:

function close_QM_facebox() { jQuery(document).trigger('close.facebox'); } 

就是這樣。未經過跨瀏覽器測試或尚未投入生產。我花了幾個小時搜索這個問題,並試圖從單引號改爲雙引號,document-dot-this和parent-dot-that,window.frames ['whatever'],而這個單行函數就是這樣做的。如果您嘗試從調用IFRAME的頁面觸發該功能,則必須確保使用父項 .close_QM_facebox()。希望這可以幫助。

順便說一句,請參閱facebox.js 1.2版本的第47和49行 - 此解決方案就在.js文件本身的註釋「用法」部分。我複製&粘貼49行到我的功能,沒有改變一個東西,除非不評論它:)