Javascript iframe内容没有';不要总是装东西

Javascript iframe内容没有';不要总是装东西,javascript,jquery,iframe,Javascript,Jquery,Iframe,因此,我有一个基本上支持两台计算机之间通信的系统,并使用WebRTC框架来实现这一点: “主机”:这是控制计算机,客户端连接到此计算机。它们控制客户端窗口。 “客户端”:客户端是另一端的用户。他们的窗口由服务器控制 我所说的控制是指主机可以: 在“客户端打开”窗口中更改CSS 控制“客户端打开”窗口上iframe的URL 这些都有变化,但本质上这就是控制的数量 当“客户端”登录时,主机向客户端发送一个web地址。然后,该网址将显示在iframe中,如下所示: $('#iframe_id').

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

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

我所说的控制是指主机可以:

  • 在“客户端打开”窗口中更改CSS
  • 控制“客户端打开”窗口上iframe的URL
这些都有变化,但本质上这就是控制的数量

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

$('#iframe_id').attr("src", URL);
还可以以消息的形式向客户端发送新的web地址。上面使用了相同的代码来导航到该URL

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

  • 我无法可靠地复制此错误
  • 我还没有看到可以和不能查看iframe内容的计算机之间的明确模式
所有的客户端都在运行谷歌chrome,大多数都在苹果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导航到某个地方是明确的——它尝试加载某些内容,但失败了

编辑:更新此问题:它确实有效,只是不适用于谷歌表单。再说一次,它不是每个人的电脑,它只是少数几个人。如果他们在其他地方导航(例如),那么它就可以正常工作


**进一步更新**:在失败的情况下,似乎存在“X-Frames-Origin”问题,因为它设置了“SAMEORIGIN”。我不明白为什么有些学生会遇到这个问题,而有些学生不会。。。当然,这取决于您导航到的页面,如果一个人可以获得,那么所有人都应该能够获得它?

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

document.getElementById('content_frame').onload = function() {...}
如果这不起作用,那么它就是iframe中的文档。如果您拥有iframe中的页面,那么您可以选择。如果不是…
setTimeout
?或
window.onload

一小条
conn.on('data',函数(data){
var data_array=JSON.parse(数据);
console.log(数据_数组);
//初始化
if(data_array.type='init'&&inititated==false){
如果(数据\u array.duration>0){
set_timeleft(data_array.duration);//考试多长时间?(分钟)
}否则{
$('#connection_remainingtime').html('No limits');
}
document.getElementById('content\u frame')。onload=function(){
$('#content_frame').attr(“src”,data_array.uri);//要导航到的url
//timestarted=data_array.start.replace(//g',);//开始时间
ob=data\u array.ob;//它是开卷的吗?实际上什么都不做……如果它不是开卷的,为什么要使用它?
snd=data\u array.snd;//允许声音吗?
inititated=true;
}
}

}
因此,这里的问题是,学生试图在代理服务器后加载此文件,但代理服务器存在cookie问题。虽然站点不使用cookie,但代理服务器使用cookie,并且当学生在其设置中阻止“第三方cookie”时,代理服务器不允许加载站点


简单地允许cookies,它就工作了:)

这取决于你在客户端和主机上加载了什么JS/jQ(你没有提供)嗯,我猜客户端加载的版本与我的版本相同(我不从CDN加载)。它的jqueryv2.1.4。它可能会使用另一个站点的缓存版本,这会导致问题吗?不,我的意思是我们不知道代码是什么或它在做什么。做一个决定<代码>$('#iframe_id').attr(“src”,URL)是不够的。啊,我明白了,好的。我在我的第一篇文章中添加了一个编辑,看看这是否有帮助。它当然会尝试重定向iframe,但iframe无法加载页面——尽管它似乎在尝试。关于这个问题的更新:它确实有效,只是不适用于google forms。再说一次,它不是每个人的电脑,它只是少数几个人。如果他们在其他地方导航(例如),那么它工作得很好。很抱歉,它花了一些时间才回复您-我需要一个特定的情况来测试这个。遗憾的是,它不起作用,它总是将iframe作为一个白色页面(src属性始终显示为“localhost”)。iframe也有很多时间加载(登录时隐藏在后台),因此我对此持怀疑态度。将来可能会给学生一个指导,告诉他们在开始练习之前应该准备什么。比如启用cookies和JavaScript(针对90年代的人)。为了彻底起见,我打算这样做,但因为我没有使用饼干,所以这不是我预料到的问题。有趣的是,这似乎是谷歌表单和代理服务器之间的连接,因为其他网站在没有启用cookie的情况下工作。如果没有启用Cookie,google forms可能不允许iframe访问?