2009-07-16 28 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行到我的功能,没有改变一个东西,除非不评论它:)