在我的应用程序中,我有一个可以打开任何网页的iframe(相同来源的99%的时间)。但是,用户可以单击iframe内的链接并进入外部网站。我设法检测到该网站是否具有相同的来源,但是对“https://www.google.ca/”等网站的请求会引发以下错误:
拒绝在相框中显示“https://www.google.ca/”,因为它将“X-Frame-Options”设置为“SAMEORIGIN”。
我有一个绑定到我的iframe的beforeunload,onerror和onload事件,但我无法通过事件对象来处理这个安全问题。
答案 0 :(得分:0)
遇到同样的问题,将第三方网页加载到我的iframe中,其中一些页面被X-Frame-Options阻止,但未包含在HTML中。
注意:在CHROME,iPhone,Mozilla Android 4.4.2中工作但是没有使用FireFox。
如果您希望在新窗口中打开这些页面,这就是我管理它的方式。 对于其他搜索此特定场景的解决方案的人来说,也许是有用的东西。
PHP(get_headers)对大多数人来说都很好但是我很少有人没有直接将X-Frame-Options提供给HTML标题(自动包含),所以get_headers失败并且浏览器收到这个[由X-Frame拒绝加载 - 选项:your_guest_url不允许跨源框架。]
我必须在我的第一页上添加链接,让用户在新窗口中打开有问题的页面,点击它并使用javascript创建inbetween页面,加载图标和setTimeout()。
firstpage.php [与' iframe'和' a'以下' iframe']
<?php
foreach(get_headers("http://".$_REQUEST["address"]) as $v) {
if($v == "X-Frame-Options: SAMEORIGIN" || $v == "X-Frame-Options: DENY") {
header("location: http://".$_REQUEST["address"]);
die();
}
}
?>
<iframe id="iframe-id" src="secondpage.php"></iframe>
<a href=your_guest_url>go to your_guest_url</a>
<script language='javascript'>
setTimeout(function() {
document.getElementById('iframe-id').src = 'your_guest_url';
},500);
</script>
secondpage.php [加载到iframe]
<div class="loading-info">
<div id="loading-info" class="loading-info-content">
<i class="fa fa-3x fa-spinner fa-pulse"></i>
</div>
</div>
<script>
setTimeout(function() {
document.getElementById("loading-info").innerHTML = "<p'>USE LINK BELOW IFRAME</p>";
},5000);
</script>
页面没有&#39;隐藏&#39; X-Frame-Options在500ms后通过javascript加载到iframe中,有问题的页面无法加载,因此第二页保留在iframe中并执行javascript setTimeout();.