C# Chrome iframe源明显由其自身改变

C# Chrome iframe源明显由其自身改变,c#,asp.net,google-chrome,iframe,devexpress,C#,Asp.net,Google Chrome,Iframe,Devexpress,我有一个ASP.Net页面,其中包含一个TabControl(由Devexpress提供),其中每个选项卡都是一个IFrame。 我的问题是,使用2014年5月发布的google chrome,一个选项卡随机(每天大约一次)更改其内容,并显示另一个(显示的选项卡)内容(此版本是客户基础设施使用的浏览器版本)。 如果我阅读IIS日志,我会看到从一开始,一个IFrame请求(请求由客户端定期发送,大约每分钟发送一次)被取消,另一个IFrame请求重复。 似乎一个iframe随机更改了它的源,并获得了

我有一个ASP.Net页面,其中包含一个TabControl(由Devexpress提供),其中每个选项卡都是一个IFrame。 我的问题是,使用2014年5月发布的google chrome,一个选项卡随机(每天大约一次)更改其内容,并显示另一个(显示的选项卡)内容(此版本是客户基础设施使用的浏览器版本)。 如果我阅读IIS日志,我会看到从一开始,一个IFrame请求(请求由客户端定期发送,大约每分钟发送一次)被取消,另一个IFrame请求重复。 似乎一个iframe随机更改了它的源,并获得了另一个iframe的页面源

这是我的场景主页代码隐藏:

在主页的页面上,我通过代码隐藏设置每个IFrame源代码(根据DB使用客户端静态IP作为配置ID读取的配置)

在我的场景中(该站点仅由公司在本地网络中使用),IP是静态的,每个客户机至少需要查看25个自定义选项卡

然后在Container.aspx页面中,我使用Request获取tabID(标识要显示的元素,以便用户的tab[0]可以显示与另一个用户的tab[0]不同的内容),并理解我需要显示的内容。 Container.aspx内部有一个UserControl,它以正确的方式显示数据

这是Container.aspx代码:

    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            //this variable "tabId" is private class variable (NOT static)
            tabId = Request["tabID"];

            try 
            {
                //this variable "id" is private class variable (NOT static)
                id = Convert.ToInt32 (  Request["ID"] ) ;
            }
            catch {}
            try 
            {
                //this variable "numberOfPages" is private class variable (NOT static)
                numberOfPages = Convert.ToInt32 (  Request["NumOfPage"] ) ;
            }
            catch {}

            if (UCDisplayData != null)
            {
                UCDisplayData.TabId = tabId ;
                UCDisplayData.TabIndex = id ;
                UCDisplayData.NumberOfTab = numberOfPages ;
            }
        }
        catch ( Exception err ) 
        {

        }
    }
然后,UCDisplayData使用其属性TabId获取绑定到的当前TabId,并使用ASPxCallback和一些javascript刷新其内容(每分钟一次)。 UCDisplayData包含一些在加载页面上正确填充的ASPxTextBox。 UpdateCallBack然后向页面发送一些JSON,其中包含要更新的字段名称和字段值。 在代码的任何部分中,都不使用javascript处理IFrame源代码

    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            if (this.TabIndex < this.NumberOfTab)
            {       
                   txtData1.Text = data readen form db ;
                   txtData2.Text = data readen form db ;
                   .
                   .
                   txtDataN.Text = data readen form db ;
            }
        }
        catch (Exception err)
        {
            LastError = err.Message;

            if (!Page.IsCallback)
                Response.Redirect("Error.aspx");
            else
                ASPxWebControl.RedirectOnCallback("Error.aspx");
        }

    }
Utils.Serialize()方法:

    public static string Serialize ( object toSerialize )
    {
        try
        {
            JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
            return javaScriptSerializer.Serialize(toSerialize);
        }
        catch ( Exception err ) 
        {
            return string.Empty ;
        }

    }
然后是更新UserControl的客户端javascrit:

Update.OnCallbackComplete = function(s, e) {
var message = deserialize(JSON.parse(e.result));

    window[message.Control_txtData1].SetText(message.txtData1);
    window[message.Control_txtData2].SetText(message.txtData2);
    .
    .
     window[message.Control_txtDataN].SetText(message.txtDataN);
};

function deserialize(_jsonObj) {

    if (!_jsonObj)
        return {};

    var result = {};
    for (var i = 0, len = _jsonObj.length ; i < len  ; i++) {
        var obj = _jsonObj[i];
        var key = _jsonObj[i].Key;
        var value = _jsonObj[i].Value;

        if (key)
            result[key] = (Array.isArray(value)) ? deserialize(value) : value;
        else {
            if (obj && Array.isArray(obj)) {
                var array = [];

                for (var i = 0, len = _jsonObj.length ; i < len ; i++)
                    array.push(deserialize(_jsonObj[i]));

                return array;
            }
        }
    }
    return result;
};
Update.OnCallbackComplete=函数(s,e){
var message=反序列化(JSON.parse(e.result));
窗口[message.Control\u txtData1].SetText(message.txtData1);
窗口[message.Control\u txtData2].SetText(message.txtData2);
.
.
窗口[message.Control\u txtDataN].SetText(message.txtDataN);
};
函数反序列化(_jsonObj){
如果(!_jsonObj)
返回{};
var result={};
对于(var i=0,len=_jsonObj.length;i
有人知道为什么一个iframe随机获得另一个iframe的相同内容吗?
提前感谢。

这段代码太多,无法查看?尝试通过删除不必要的代码来最小化代码。我认为javascript和UpdateCallback不是问题的原因,因此不能考虑它们,但我需要显示页面加载源,因为它们在执行“路径”中,我认为它们与问题有关(我想我在页面生命周期中遗漏了一些东西)。提前谢谢你的帮助。
    public static string Serialize ( object toSerialize )
    {
        try
        {
            JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
            return javaScriptSerializer.Serialize(toSerialize);
        }
        catch ( Exception err ) 
        {
            return string.Empty ;
        }

    }
Update.OnCallbackComplete = function(s, e) {
var message = deserialize(JSON.parse(e.result));

    window[message.Control_txtData1].SetText(message.txtData1);
    window[message.Control_txtData2].SetText(message.txtData2);
    .
    .
     window[message.Control_txtDataN].SetText(message.txtDataN);
};

function deserialize(_jsonObj) {

    if (!_jsonObj)
        return {};

    var result = {};
    for (var i = 0, len = _jsonObj.length ; i < len  ; i++) {
        var obj = _jsonObj[i];
        var key = _jsonObj[i].Key;
        var value = _jsonObj[i].Value;

        if (key)
            result[key] = (Array.isArray(value)) ? deserialize(value) : value;
        else {
            if (obj && Array.isArray(obj)) {
                var array = [];

                for (var i = 0, len = _jsonObj.length ; i < len ; i++)
                    array.push(deserialize(_jsonObj[i]));

                return array;
            }
        }
    }
    return result;
};