https页面中出现莫名其妙的安全警告
在IE中访问一个https的页面,这是一个相对比较安全的操作,所以IE会要求这个页面内的所有内容皆来自于安全的域。这时候要是页面中有http的资源,比如图片、脚本、页面(frame或iframe中)等,在IE的默认设置下我们就会得到一个内容安全的警告窗口。而今天遇到的这个警告可以说是莫名其妙到无语。
原来在IE6下我就做过对https页面的友好支持,IE6似乎比IE7的要求还严格,iframe的src指向about:blank都算是不安全,会弹出下面这个安全警告窗口(IE7中指向这个空白页已经不算不安全了)。
// 这个窗口看得我都要吐了,今天
经过一天的debug,最后确定了出错的代码和出错场景。代码如下:
稍加解释,这段代码就是把从服务器段动态取回来的TreeView的子节点添加到树上去。由于子树的html在返回的时候有一个span作为其container,所以我就先把html转成DOM对象,然后取span对象的子对象的子对象。代码第一行的那个span是用来转换html到DOM对象的,第四行就是取出树(子树)对象,然后判断子树是否有节点,如果有就用过childTreeContent.appendChild(tree)添加到TreeView上去。
结果问题就出在了这最后appendChild()一句上!更郁闷的这个警告窗口还不是执行这段代码就必然出,它还有一个条件,只有当data中的html代码大于一定数量的时候,才会出这个提示。我反复测试,发现这个阈值在15-20k的html代码之间,具体的那个值到底是几何,我实在是没有兴趣去测出来了。也就是说,当子树的html代码小于15k的时候,执行上面的代码,不会有任何警告提示;而当返回的html代码大于20k的时候,就会出那个Security Information的警告窗口@_@。真是要了亲命的说~~~
解决这个问题的办法似乎也很扯淡,直接对子树节点的innerHTML赋值就行了。。。
下午正被这个问题搞得一筹莫展的时候,同事还又发现了IE一个同样让人抓狂的限制:
· JScript中的eval无法处理超过65535元素的Array
原来在IE6下我就做过对https页面的友好支持,IE6似乎比IE7的要求还严格,iframe的src指向about:blank都算是不安全,会弹出下面这个安全警告窗口(IE7中指向这个空白页已经不算不安全了)。
// 这个窗口看得我都要吐了,今天
经过一天的debug,最后确定了出错的代码和出错场景。代码如下:
var span = node.document.createElement('SPAN');
span.innerHTML = data;
childTreeContent.innerHTML = String.Empty;
var tree = span.childNodes[0].childNodes[0];
if ( tree && tree.rows.length > 0 )
{
childTreeContent.appendChild(tree);
this.UpdateProfileIcon(tree.rows[0]);
var treeview = this.GetTreeView(node);
treeview.CheckedNodes = this.GetAllCheckedNodes(treeview);
treeview.SelectedNodes = this.GetAllSelectedNodes(treeview);
}
span.innerHTML = data;
childTreeContent.innerHTML = String.Empty;
var tree = span.childNodes[0].childNodes[0];
if ( tree && tree.rows.length > 0 )
{
childTreeContent.appendChild(tree);
this.UpdateProfileIcon(tree.rows[0]);
var treeview = this.GetTreeView(node);
treeview.CheckedNodes = this.GetAllCheckedNodes(treeview);
treeview.SelectedNodes = this.GetAllSelectedNodes(treeview);
}
稍加解释,这段代码就是把从服务器段动态取回来的TreeView的子节点添加到树上去。由于子树的html在返回的时候有一个span作为其container,所以我就先把html转成DOM对象,然后取span对象的子对象的子对象。代码第一行的那个span是用来转换html到DOM对象的,第四行就是取出树(子树)对象,然后判断子树是否有节点,如果有就用过childTreeContent.appendChild(tree)添加到TreeView上去。
结果问题就出在了这最后appendChild()一句上!更郁闷的这个警告窗口还不是执行这段代码就必然出,它还有一个条件,只有当data中的html代码大于一定数量的时候,才会出这个提示。我反复测试,发现这个阈值在15-20k的html代码之间,具体的那个值到底是几何,我实在是没有兴趣去测出来了。也就是说,当子树的html代码小于15k的时候,执行上面的代码,不会有任何警告提示;而当返回的html代码大于20k的时候,就会出那个Security Information的警告窗口@_@。真是要了亲命的说~~~
解决这个问题的办法似乎也很扯淡,直接对子树节点的innerHTML赋值就行了。。。
var treeData = data.substring(data.indexOf('>')+1, data.length-7);
childTreeContent.innerHTML = treeData;
var childTree = childTreeContent.children(0);
if ( childTree && childTree.rows.length > 0 )
{
this.UpdateProfileIcon(childTree.rows[0]);
var treeview = this.GetTreeView(node);
treeview.CheckedNodes = this.GetAllCheckedNodes(treeview);
treeview.SelectedNodes = this.GetAllSelectedNodes(treeview);
}
// 只是要用substring方法"手工"移掉作为container的span元素。childTreeContent.innerHTML = treeData;
var childTree = childTreeContent.children(0);
if ( childTree && childTree.rows.length > 0 )
{
this.UpdateProfileIcon(childTree.rows[0]);
var treeview = this.GetTreeView(node);
treeview.CheckedNodes = this.GetAllCheckedNodes(treeview);
treeview.SelectedNodes = this.GetAllSelectedNodes(treeview);
}
下午正被这个问题搞得一筹莫展的时候,同事还又发现了IE一个同样让人抓狂的限制:
· JScript中的eval无法处理超过65535元素的Array
posted on 2007-08-09 20:05 birdshome 阅读(7050) 评论(6) 编辑 收藏 举报