0

我有一个脚本,它从数组中获取 url,然后将它们一个接一个地放入 iframe:

<script type="text/javascript">
    $(document).ready(function () {
        var array = ['http://www.example1.come', 'http://www.example2.com', 'http://www.example3.com'];
        var beforeLoad = (new Date()).getTime();
        var loadTimes = [];
        $('#1').on('load', function () {
            loadTimes.push((new Date()).getTime());
            $('#1').attr('src', array.pop());
            if (array.length === 0) {
                $.each(loadTimes, function (index, value) {
                    $("#loadingtime" + index).html(value - beforeLoad);
                });
            }
        }).attr('src', array.pop());
    });
</script>

我的问题是,如果我输入像“google.com”或“youtube.com”这样的网址 - 它不会加载,从而使其他来源卡住并且也不会加载。如果我尝试将 google.com 作为 iframe 的来源,我会在 chrome 控制台模式下收到此错误:Refused to display 'http://www.google.com/' in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN'.

如果我的 url 列表中有这样一个 url 给出了这个错误并且不会加载,我怎么能做到这一点,它会跳过那个 url 并加载下一个?我可以设置一个超时或什么的吗?

4

2 回答 2

1

不幸的是,我认为你无法摆脱这个错误,因为它是防止点击劫持的安全功能。

有关更多信息,请参阅 MDN。据它介绍,现在所有主要桌面浏览器都支持 X-Frame-Options 标头。

有几个想法供您尝试:

  1. 您的代码似乎可以在 Firefox 中运行(Firefox Nightly,2013-01-06),因此如果可以选择更改浏览器,您可以尝试。
  2. 使用 Ajax,您可以在更改 iframe.src 属性之前检查网站的标题。如果其中一个标题是“X-Frame-Options”,您可以选择继续访问另一个 URL。
    当然,使用这种方法你会偶然发现 CORS ,但是在 FirefoxChrome中都可以禁用此功能。
    显然,在您的情况下,通过 Ajax 加载网页然后测量它的加载时间似乎不是一个好主意。但是,您可以尝试加载子页面(例如“ http://youtube.com/SOMETHING ”)而不是根页面,以避免缓存您正在测量的内容。
于 2013-02-28T06:29:41.607 回答
0

从技术上讲,您可以尝试在您的 Web 服务器上下载该页面,然后显示该文件。

法律上不允许你这样做。

于 2013-02-28T07:15:48.663 回答