Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检测iframe src是否可显示_Javascript_Jquery_Html_Iframe - Fatal编程技术网

Javascript 检测iframe src是否可显示

Javascript 检测iframe src是否可显示,javascript,jquery,html,iframe,Javascript,Jquery,Html,Iframe,我希望在iframe中加载外部网站,如果这些网站中有任何一个使用了框架拦截器,那么我希望将用户重定向到错误页面。有几种建议的方法可以做到这一点: 等待加载超时 查看iframe src html内容在加载后是否为“空” 试图抓住一个错误 维护“黑名单”URL的数据库 到目前为止,令人沮丧的是,我在最后一件物品上运气最好。其他方法不起作用,原因如下: 正在等待加载超时: 即使在使用帧杀手的网站上,onload事件也会发生。例如,如果我尝试访问www.google.com,它只会加载空的ht

我希望在iframe中加载外部网站,如果这些网站中有任何一个使用了框架拦截器,那么我希望将用户重定向到错误页面。有几种建议的方法可以做到这一点:

  • 等待加载超时
  • 查看iframe src html内容在加载后是否为“空”
  • 试图抓住一个错误
  • 维护“黑名单”URL的数据库
到目前为止,令人沮丧的是,我在最后一件物品上运气最好。其他方法不起作用,原因如下:

  • 正在等待加载超时:
    • 即使在使用帧杀手的网站上,onload事件也会发生。例如,如果我尝试访问www.google.com,它只会加载空的html结构
  • 查看加载后iframe src html内容是否为“空”
    • 由于同源策略,您无法访问iframe的外部src内容
  • 正在尝试捕获错误:
    • 据我所知,我只能找到与源于本地JS代码的错误相关的错误处理函数,而与错误无关的函数,如
      “拒绝在帧中显示,因为它将'X-frame-Options'设置为'SAMEORIGIN'
      /
      'DENY'
  • 维护“黑名单”URL的数据库:
    • 这显然是一个糟糕的解决方案,它是不全面的和一个大名单哈哈

也许我误解了其中一种方法。这里有我错过的解决方案吗?就上下文而言,我主要在JS+jQuery中这样做。

我有一个临时修复程序,使用@charlietfl建议的标题信息,尽管它并不完美,正如您在测试部分中看到的,并非所有站点都在标题中列出x-frame选项

<?php 

// checkXFO
// checks x-frame options
// $headers: an array of headers
// returns: nothing
function checkXFO($headers){
    if($headers['X-Frame-Options']==""){
        echo "good to embed! <p>";
    }
    else{
        echo "Denied! <p>";
    }
}

//-----------------------
// tests
//-----------------------

// x-frame option: SAMEORIGIN
// should deny
// > passes
$headerArray = get_headers('http://www.google.com',1); 
checkXFO($headerArray);

// x-frame option: DENY
// should deny
// > passes
$headerArray = get_headers('http://www.facebook.com',1); 
checkXFO($headerArray);

//x-frame option: none
// should accept
// > passes
$headerArray = get_headers('http://wikipedia.org',1); 
checkXFO($headerArray);

//x-frame option: none
// should accept
// > passes
$headerArray = get_headers('http://neopets.com',1); 
checkXFO($headerArray);

//x-frame options: DENY
// should deny
// > fails
$headerArray = get_headers('http://www.yahoo.com',1); 
checkXFO($headerArray);

//x-frame option:none. Redirected x-frame options: DENY
// should deny
// > fails
$headerArray = get_headers('http://www.yahoo.ca',1); 
checkXFO($headerArray);
?>


有一次我自己花了很多时间在同一个问题上,却从未找到解决方案。尽管我从未尝试过的一件事是使用服务器端脚本发出head请求,但如果有人出现,请感到好奇。。这可能是值得一试的。嗯,这确实值得一试。但是,有一件事不会被理解,那就是任何脚本都会强制框架页面位于顶部,但可能会帮助您缩小在iframe中肯定不起作用的标题