Javascript 如何检查是否允许对页面进行iframed?

Javascript 如何检查是否允许对页面进行iframed?,javascript,iframe,Javascript,Iframe,我想做的是动态地构建一些页面,所以当用户单击某个按钮时,某个页面(使用该按钮动态生成的链接)会在一个iframe中打开。我想跳过那些不允许对其内容设置框架的URL 有什么方法可以检查URL是否限制自己为iframe吗?我认为页面和iframe之间没有任何限制。我知道页面可以通过javascript检查是否在iframe中 对URL发出AJAX请求,检查x-frame-options标题。如果它是DENY或SAMEORIGIN,那么您可能无法显示它 var xhr = $.get("http://

我想做的是动态地构建一些页面,所以当用户单击某个按钮时,某个页面(使用该按钮动态生成的链接)会在一个iframe中打开。我想跳过那些不允许对其内容设置框架的URL


有什么方法可以检查URL是否限制自己为iframe吗?

我认为页面和iframe之间没有任何限制。我知道页面可以通过javascript检查是否在iframe中

对URL发出
AJAX
请求,检查
x-frame-options
标题。如果它是
DENY
SAMEORIGIN
,那么您可能无法显示它

var xhr = $.get("http://somewhere.com");
xhr.always(function () {
  var frameOption = xhr.getResponseHeader("x-frame-options");
  if (frameOption == "DENY") {
    // etc.
  }
});

正如adeneo指出的那样,对于许多具有跨域策略的站点来说,这可能会失败。您最好的选择是在自己的后端检查URL


向您的服务器添加一条路由,该路由接受URL,获取URL并检查它是否可以设置框架。

现在有一种可靠的方法可以确定URL不可设置框架

通过Ajax请求并检查响应中的
X-Frame-Options
标题,可以排除大多数URL。(不考虑“同一原产地政策”)

其他网站使用脚本检查它们是否为iframe,只有在隐藏的iframe中“测试”网站并自己检查内容,才能排除这些网站。当然,这仅适用于您知道预期内容或至少一些关键元素的情况。

要防止加载的iframe重定向您自己的页面,您可以使用或交替检查
onbeforeuload

,除了跨浏览器脚本编写之外,没有任何限制。这意味着您可以从任何站点将任何页面加载到iframe中。当然,如果可以的话,这将取决于网站是否尝试摆脱iframe。你根本没有真正回答这个问题。OP询问如何检测站点是否无法加载,例如,如果存在
X-Frame
标题,或者框架破坏,则不太清楚,因此回答“没有限制”甚至不接近答案?在浏览器中,您可能受到限制,但在服务器端,您可以检查
X-Frame-Options
标题,这就是现在每个人都在使用的。我猜这在跨域网站上根本不起作用?如果我没说错的话,ajax对跨域网站不起作用?ajax真的不是一个选项,因为检查页面是否可以被框架肯定是跨域的,任何不允许框架的人肯定不会允许跨域调用。隐藏的iframe也不是一个选项,对于X-Frame标题,不会触发特殊事件,响应仍然是200,大多数框架破坏技术重定向父窗口,因此隐藏的iframe只会重定向您的页面。我同意,Ajax在大多数情况下是没有选项的,但在某些情况下是这样的,例如,在同一域上设置旧应用程序的框架。hidden iframe选项是可能的,不美观,但也可能,在父帧中检查onbeforeunload,在iframe中检查onload。