"检测iframe是否为跨域的万无一失方法“的答案描述了一种方法,用于测试页面上的iframe是否指向同一域或跨域页,处理不同浏览器对跨域策略的解释,并避免可能中断用户或停止javascript的错误消息。
我希望这样做,但是从iframe内部的子页面中测试它是否在跨域iframe中。
访问有关父域的(相同域)信息可以与parent
全局(例如parent.document.location
)一起使用,但是当检测到父服务器是跨域的时候,是否有可靠的方法来完成跨浏览器的操作而不会陷入错误呢?
为了方便测试,这里有一个在 小提琴中的 吉斯宾 ,它在尝试测试parent.location.host
是否是可访问的时候会崩溃。是否有可靠的方法可以得到一些有用的东西,比如false
,告诉我们这是一个跨域父程序,而不是一个错误?
是否有一个try...catch
变体将是健壮的跨浏览器?或者使用来自parent.postMessage()
的返回值的一些聪明的技巧?(尽管父页无法编辑)
用例:想象一下可嵌入的内容,这些内容将嵌入到自己网站上的页面上,并由第三方嵌入。如果页面位于一个相同的域iframe,我们隐藏品牌和链接回到原来的网站,因为用户已经在这里。如果他们从第三方访问页面,或者直接加载页面,我们会显示品牌和信用,这样他们就可以看到内容的来源。
为了澄清,我知道相同的域策略,我不在乎跨浏览器域是什么,我只是想编写一个简单但可靠的if
条件,比如if( crossDomainParent() ){ /* do something */}
。
发布于 2014-02-23 07:16:34
首先检查您是否是IFramed。
window.self !== window.top
如果您是IFramed,那么您的推荐程序就是您的父框架url。
document.referrer
从这个url中,您应该能够检测到是否要分支您的代码。
发布于 2017-03-08 00:17:10
下一代真正的跨浏览器解决方案:
function isCrossOriginFrame() {
try {
return (!window.top.location.hostname);
} catch (e) {
return true;
}
}
console.log(isCrossOriginFrame());
在一个像样的桌面和移动浏览器上测试。
发布于 2017-10-09 01:08:37
我试图使用referrer来确定跨域,但我发现它在许多站点上是不可靠的。也许有人会发现这很有用。
function IsCrossDomainFrame() {
if( parent === window ) return false; //not a frame
var parentLocation = new URL(document.referrer);//the referrer of an iframe is the parent
return (parentLocation.protocol !== location.protocol ||
parentLocation.hostname !== location.hostname ||
parentLocation.port !== location.port);
}
协议、主机名和端口确定跨域。
https://stackoverflow.com/questions/21751377
复制相似问题