隐藏的iframe chrome回调未触发

时间:2013-06-06 09:05:56

标签: javascript google-chrome iframe hidden

我正在使用隐藏框架技术开发网页,以从服务器检索一些数据。 数据实时更新,服务器会在每次修改时通知浏览器。

该组件在IE和Firefox中都有效,但在chrome中,服务器检索的回调函数不会在客户端浏览器中执行。 但是,我可以看到开发人员工具中打开的连接,以及通过该连接收到的数据不断增长。

我已经读过某些浏览器在解析和执行从服务器接收的数据时可能会遇到问题,但我无法找到这些案例的解决方案。

也许我需要向这个案例发送一些http标题,但我甚至不知道要搜索什么。

编辑:代码示例 这是我用来连接服务器的功能。它在登录步骤后调用。登录的实现方式与连接步骤相同。

function __sendConnectRequest()
{
    document.getElementById(UID).setAttribute('value', __username);  
    document.getElementById(SID).setAttribute('value', __sessionKey);
    document.getElementById(PID).setAttribute('value', __privateKey);
    try
    {
        document.getElementById('connectFormId').submit();  
    }
    catch (err)
    {
        alert("error connecting");
        console.log("__sendConnectRequest: " + err.message);
    }    
}


var __connectResponseCallback = null;
function __setConnectResponseCallback(callback)
{
    __connectResponseCallback = callback;
}

function __connectResponseHandler(statusCode)
{
     if(__connectResponseCallback)
     {
        __connectResponseCallback(statusCode);       
     }
}

这是我创建DOM元素的方法。这些元素被附加到文档的主体,并且表单有一些输入字符串。

function getNewIframe(name, id)
{
    //KNOWN BUG IN IE while creating iframes
    //http://webbugtrack.blogspot.com/2007/10/bug-235-createelement-is-broken-in-ie.html
    var iframe;
    try
    {
        iframe = document.createElement('<iframe name="' + name + '">');
    }
    catch (ex)
    {
        iframe = document.createElement('iframe');
        iframe.name = name;
    }
    iframe.id = id;
    iframe.style.display = 'none';
    return iframe;
}    

function getNewForm(name, id, target, action)
{
    var form = document.createElement("form");
    form.name = name;
    form.id = id;
    form.method = 'post';
    form.target = target;
    form.action = serverUrl+action; 
    form.style.display = 'none';
    return form;
}    

1 个答案:

答案 0 :(得分:0)

通过在服务器响应中添加multipart/x-mixed-replace标头来解决该问题。这样,数据以块的形式执行,浏览器不需要等待接收所有响应。

它似乎是彗星技术的旧标准。<​​/ p>