iframe内容并不总是加载

时间:2016-05-20 01:31:09

标签: javascript jquery iframe

所以我有一个基本上支持两台计算机之间通信的系统,并使用WebRTC框架来实现这一目标:

“主机”:这是控制计算机,客户端连接到此。他们控制客户窗口。 “客户端”:是另一端的用户。他们的窗口由服务器控制。

我的意思是控制,主持人可以:

  • 在客户打开窗口中更改CSS。
  • 在客户端打开窗口中控制iframe的URL

这些存在差异,但基本上就是控制量。

当“客户端”登录时,主机会向客户端发送Web地址。然后,此网址将显示在iframe中,如下所示:

$('#iframe_id').attr("src", URL);

还能够以消息的形式向客户端发送新的Web地址。上面使用相同的代码导航到该URL。

我遇到的问题是,在4台计算机中,大约有四分之一的iframe实际上没有加载。它要么显示白色屏幕,要么显示小“无法显示页面”图标:

  • 我无法可靠地复制此错误
  • 我还没有看到能够和不能查看iframe内容的计算机之间的清晰模式。

所有客户都在运行谷歌浏览器,大多数都在苹果powermac上运行。我所做的唯一一个半连接是Windows计算机似乎对它更容易受到影响,但不是我可以重现的方式。有时刷新页面有效...

是否有任何已知的错误可能会导致这种情况发生?我已经阅读过关于iframe白色闪光的内容,但我确信这不是那个问题。我相信这不是jQuery加载的问题,因为这会在此之前产生问题并且很容易发现。

非常感谢。 亚历

编辑:好的,这里是从服务器收集数据的代码。检查后,收到的数据是正确的。

conn.on('data', function(data) {
    var data_array = JSON.parse(data);
    console.log(data_array);

    // initialisation
    if(data_array.type=='init' && inititated === false) {
        if(data_array.duration  > 0) {
            set_timeleft(data_array.duration);                  // how long is the exam? (minutes)      
        } else {
            $('#connection_remainingtime').html('No limits');
        }
        $('#content_frame').attr("src", data_array.uri);    // url to navigate to
        //timestarted = data_array.start.replace(/ /g,'');  // start time
        ob = data_array.ob;                                 // is it open book? Doesnt do anything really... why use it if it isnt open book?
        snd = data_array.snd;                               // is sound allowed?
        inititated = true;
    }       
}

当客户端启动iframe更改时,试图让iframe导航到某个地方是明确的 - 它尝试加载但失败了。

编辑:此问题的更新:它确实有效,只是没有谷歌表格。而且不仅是每个人的计算机,它只是少数人。如果他们导航到其他地方(例如http://www.bit-tech.net),那么它的工作正常。

**进一步更新**:似乎失败的那些,有一个'X-Frames-Origin'问题,因为它设置了'SAMEORIGIN'。我不明白为什么有些学生会遇到这个问题,有些人不会......当然这取决于你导航到的页面,如果一个人能够得到它应该能够做到?

2 个答案:

答案 0 :(得分:1)

所以这里的问题是学生们试图将这个加载到一个有cookie问题的代理服务器后面。虽然该网站不使用cookie,但代理会这样做,并且当学生阻止第三方cookie时#34;在他们的设置中,代理不允许加载网站。

简单地允许使用cookies并且它有效:)

答案 1 :(得分:0)

iframe是最后在DOM中加载的内容之一,因此请将iframe依赖代码包装在此:

document.getElementById('content_frame').onload = function() {...}

如果这不起作用那么它就是iframe中的文档。如果你拥有iframe中的页面,那么你有选择权。如果不是...... setTimeout?或window.onload ......?

conn.on('data', function(data) {
      var data_array = JSON.parse(data);
      console.log(data_array);

      // initialisation
      if (data_array.type == 'init' && inititated === false) {
        if (data_array.duration > 0) {
          set_timeleft(data_array.duration); // how long is the exam? (minutes)      
        } else {
          $('#connection_remainingtime').html('No limits');
        }
        document.getElementById('content_frame').onload = function() {
          $('#content_frame').attr("src", data_array.uri); // url to navigate to
          //timestarted = data_array.start.replace(/ /g,'');  // start time
          ob = data_array.ob; // is it open book? Doesnt do anything really... why use it if it isnt open book?
          snd = data_array.snd; // is sound allowed?
          inititated = true;
        }
      }
    }