【发布时间】:2014-03-12 03:53:51
【问题描述】:
对“Foolproof way to detect if iframe is cross domain”的回答描述了一种测试页面上的 iframe 是否指向同域或跨域页面的方法,解决不同浏览器对跨域策略的解释并避免错误消息这会打断用户或停止 javascript。
我希望做与此等效的操作,但 from iframe 内的子页面测试它是否 inside 是跨域 iframe。
access (same domain) info about the parent 可以使用 parent 全局,例如parent.document.location,但是当它检测到父级是跨域时,是否有一种可靠的方法来执行此跨浏览器而不会崩溃?
为了方便测试,这是jsfiddle 中的jsbin,在尝试测试parent.location.host 是否可访问时会崩溃并出错。有没有可靠的方法来获得可用的东西,比如false,告诉我们这是一个跨域父级,而不是一个错误?
是否有一个try...catch 变体将是强大的跨浏览器?或者可能是使用来自parent.postMessage() 的返回值的一些巧妙技巧? (虽然不能编辑父页面)
用例:想象一下可嵌入内容,这些内容要嵌入到自己网站的页面上,也可以由第三方嵌入。如果页面位于同域 iframe 上,我们会隐藏品牌并链接回原始站点,因为用户已经在这里。如果他们从第 3 方 iframe 访问页面或直接加载页面,我们会显示品牌和信用,以便他们可以看到内容的来源。
澄清一下,我知道同域策略,我不关心跨浏览器域是什么,我只是想写一个简单但可靠的if 条件,例如if( crossDomainParent() ){ /* do something */}
【问题讨论】:
-
我见过的最佳答案是访问 try-catch 中的 top.document stackoverflow.com/a/19566486/151503
标签: javascript html iframe cross-browser