首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >检测此页面是否在跨域iframe中的万无一失方法

检测此页面是否在跨域iframe中的万无一失方法
EN

Stack Overflow用户
提问于 2014-02-13 10:22:11
回答 8查看 25.4K关注 0票数 31

"检测iframe是否为跨域的万无一失方法“的答案描述了一种方法,用于测试页面上的iframe是否指向同一域或跨域页,处理不同浏览器对跨域策略的解释,并避免可能中断用户或停止javascript的错误消息。

我希望这样做,但是从iframe内部的子页面中测试它是否在跨域iframe中。

访问有关父域的(相同域)信息可以与parent全局(例如parent.document.location )一起使用,但是当检测到父服务器是跨域的时候,是否有可靠的方法来完成跨浏览器的操作而不会陷入错误呢?

为了方便测试,这里有一个在 小提琴中的 吉斯宾 ,它在尝试测试parent.location.host是否是可访问的时候会崩溃。是否有可靠的方法可以得到一些有用的东西,比如false,告诉我们这是一个跨域父程序,而不是一个错误?

是否有一个try...catch变体将是健壮的跨浏览器?或者使用来自parent.postMessage()的返回值的一些聪明的技巧?(尽管父页无法编辑)

用例:想象一下可嵌入的内容,这些内容将嵌入到自己网站上的页面上,并由第三方嵌入。如果页面位于一个相同的域iframe,我们隐藏品牌和链接回到原来的网站,因为用户已经在这里。如果他们从第三方访问页面,或者直接加载页面,我们会显示品牌和信用,这样他们就可以看到内容的来源。

为了澄清,我知道相同的域策略,我不在乎跨浏览器域是什么,我只是想编写一个简单但可靠的if条件,比如if( crossDomainParent() ){ /* do something */}

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2014-02-23 07:16:34

首先检查您是否是IFramed。

代码语言:javascript
运行
复制
window.self !== window.top

如果您是IFramed,那么您的推荐程序就是您的父框架url。

代码语言:javascript
运行
复制
document.referrer

从这个url中,您应该能够检测到是否要分支您的代码。

票数 50
EN

Stack Overflow用户

发布于 2017-03-08 00:17:10

下一代真正的跨浏览器解决方案:

代码语言:javascript
运行
复制
function isCrossOriginFrame() {
  try {
    return (!window.top.location.hostname);
  } catch (e) {
    return true;
  }
}

console.log(isCrossOriginFrame());

在一个像样的桌面和移动浏览器上测试。

https://jsfiddle.net/arzd4btc/3/

票数 11
EN

Stack Overflow用户

发布于 2017-10-09 01:08:37

我试图使用referrer来确定跨域,但我发现它在许多站点上是不可靠的。也许有人会发现这很有用。

代码语言:javascript
运行
复制
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);
}

协议、主机名和端口确定跨域。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21751377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档