" 检测iframe是否为跨域 "的" 万无一失的方法 "的答案描述了一种方法,用于测试页面上的iframe是指向同域还是跨域页面,解决不同浏览器对跨域策略的解释和避免会中断用户或停止javascript的错误消息.
我正在寻找相当于这个但是从 iframe内部的子页面测试它是否在跨域iframe 内部.
可以通过全局访问(相同域)有关父级的信息,但有没有可靠的方法来执行此跨浏览器,而不会在检测到父级是跨域时崩溃到错误?parent
parent.document.location
对于方便的测试,这里是一个jsfiddle中的jsbin,在尝试测试是否parent.location.host
可访问时崩溃成错误.是否有一种可靠的方法来获取可用的东西,比如false
告诉我们这是一个跨域的父级,而不是错误?
是否有一个try...catch
变体,它将是强大的跨浏览器?或者可能是一些使用返回值的巧妙技巧parent.postMessage()
?(虽然父页面无法编辑)
使用案例:想象嵌入在自己网站上的页面上的可嵌入内容,以及第三方.如果页面位于同域iframe上,我们会隐藏品牌并链接回原始网站,因为用户已在此处.如果他们从第三方iframe访问该页面或直接加载页面,我们会显示品牌和信用,以便他们可以看到内容的来源.
为了澄清,我知道相同的域策略,我不关心跨浏览器域是什么,我只是想写一个简单但可靠的if
条件,如if( crossDomainParent() ){ /* do something */}
我遇到了从iFrame访问父窗口的任务,如果iFrame中的窗口是从另一个域加载的.如果我理解正确,现在所有现代浏览器都允许这样做.所以我在这里找到最好的解决方案.
我将以下一个方式完成此任务:
我有一个叠加内部的iFrame.这将有效,而不是弹出窗口阻止弹出窗口阻止程序阻止我的内容.任务是在iFrame中的文档完成某些工作时重新加载主页面.在一个将加载到iFrame的文档中,我将添加
<div id="is_closed" class="false"></div>
Run Code Online (Sandbox Code Playgroud)
在父窗口中,我将添加函数,该函数将每秒调用一次并检查此div是否仍具有类名"false".当这将改为"true"时,我会打电话给一些回调.
如果您有更好的解决方案,请与我分享.将不胜感激任何帮助.
编辑:这是不可能的,因为它不仅无法从子窗口操纵父窗口,反之亦然.我的想法是从父窗口操纵子窗口.我错了.