优雅地关闭iframe框架(工具栏)

问题描述:

我创建了一个与相当流行的音乐零售商一起使用的工具。优雅地关闭iframe框架(工具栏)

该工具提供了一个增强的搜索功能(透明的last.fm结果,没有广告,没有跛脚,没有令人毛骨悚然),我发现最有用和不显眼的方式来显示搜索是作为一个工具栏使用非常maligned iframe中。这允许用户在不窃取用户焦点的情况下加载搜索。

不是特别喜欢iframe的人我认为添加“关闭此框架”(ala Google图片搜索)链接可以让用户快速轻松地重新获得对其浏览器的控制,这将是微不足道的。

但不像谷歌,我不知道内容在iframe中的位置是什么(仅在它通过src开始的地方)。

所以现在我发现自己处于XSS世界和所有与安全有关的问题。

使用Javascript我已经添加了“后退”和“前进”按钮,并且父对象中的链接调用了历史对象(当用户执行搜索时,结果加载到iframe中,所以后退按钮允许他们去在完成使用/细读搜索结果后返回到主站点)。

有什么方法可以调用iframe中的当前位置并将页面(现在无框)重新加载到该位置?

我检查了PHP $ GLOBAL/$ _ SERVER变量,看看我可能会幸运。我明白有安全问题,但我不明白这个特定的函数与history.back()的不同之处在于,浏览器在没有“通知”父框架的情况下自己调用它。

我知道我可以从iframe中检索src位置,但当然这假设用户不会浏览超出此页面,如果他们这样做,他们不介意丢失他们的当前位置并被重定向回页面最初由框架调用(...啊...)。

它几乎看起来像框架被设计来窃取窗户,没有办法优雅地'爆发'并保持用户会话的完整性。

难怪人们讨厌他们。 :)

+0

我不知道如果我理解正确的话,你是在主文档的控制,您显示在外部文件iframe,并且您希望主文档在iframe中加载任何内容作为新的主文档?并且您没有与iframe中的文档进行任何合作? – Jim 2008-09-27 02:10:22

在Google图片搜索时,通过返回到原始帧源,当您删除该帧时,它将按照您当前的建议运行。对于XSS的原因,找到当前位置应该是不可能的,如果是这样的话,它将被视为一个错误并在随后的浏览器补丁中修复,因此如果存在这样的缺陷,可能不是最好的依靠。尽管如此,在没有透露位置的情况下,优雅地爆发出来的方式会很好。这可能是您可以向HTML5组提出的建议。

并不是说它真的太有帮助了,但最接近的可能是检测是否有人真的离开了原始帧源页面。在浏览框架时,历史记录对象会维护条目,并且如果您在页面加载时的原始历史记录长度大于有人单击“突破此框架...”时的历史记录长度,则您知道他们正在浏览框架。

我很欣赏你(hal10001)和Zach抽空回答。由于xss安全问题,看起来我很勉强(正如我怀疑的那样)。

我想我可以简单地包裹所有一个基于PHP的代理中的内容,但显然进入令人毛骨悚然的区域,更不用说增加的等待时间和什么,而不是。

我会继续旋转这个想法,因为我遇到了一些理智和可用的东西,但是在那之前我想我会用稍微不那么好的方法来提升原始框架并消除它们的当前位置(并且if他们不喜欢我可以重温了iframe /工具栏的情况。

再次感谢!