C# Chrome 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代码: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随机更改了它的源,并获得了
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;
};