use*_*ca8 24 html javascript iframe cross-browser
" 检测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 */}
pal*_*nik 43
首先检查你是否是IFramed.
window.self !== window.top
Run Code Online (Sandbox Code Playgroud)
如果您是IFramed,那么您的推荐人是您的父框架网址.
document.referrer
Run Code Online (Sandbox Code Playgroud)
通过此URL,您应该能够检测是否要分支代码.
真正的后期浏览器解决方案:
function isCrossOriginFrame() {
try {
return (!window.top.location.hostname);
} catch (e) {
return true;
}
}
console.log(isCrossOriginFrame());
Run Code Online (Sandbox Code Playgroud)
在大量的桌面和移动浏览器上进行测试.
https://jsfiddle.net/arzd4btc/3/