https页面中出现莫名其妙的安全警告

    在IE中访问一个https的页面,这是一个相对比较安全的操作,所以IE会要求这个页面内的所有内容皆来自于安全的域。这时候要是页面中有http的资源,比如图片、脚本、页面(frame或iframe中)等,在IE的默认设置下我们就会得到一个内容安全的警告窗口。而今天遇到的这个警告可以说是莫名其妙到无语。

    原来在IE6下我就做过对https页面的友好支持,IE6似乎比IE7的要求还严格,iframe的src指向about:blank都算是不安全,会弹出下面这个安全警告窗口(IE7中指向这个空白页已经不算不安全了)。

    SecurityInformation.png
    // 这个窗口看得我都要吐了,今天

    经过一天的debug,最后确定了出错的代码和出错场景。代码如下:
None.gifvar span =  node.document.createElement('SPAN');
None.gifspan.innerHTML 
=
 data;
None.gifchildTreeContent.innerHTML 
=
 String.Empty;
None.gif
var tree = span.childNodes[0].childNodes[0
];
None.gif
if ( tree && tree.rows.length > 0
 )
ExpandedBlockStart.gifContractedBlock.gif
dot.gif
{
InBlock.gif    childTreeContent.appendChild(tree);
InBlock.gif    
this.UpdateProfileIcon(tree.rows[0
]);
InBlock.gif    
var treeview = this
.GetTreeView(node);
InBlock.gif    treeview.CheckedNodes 
= this
.GetAllCheckedNodes(treeview);
InBlock.gif    treeview.SelectedNodes 
= this
.GetAllSelectedNodes(treeview);
ExpandedBlockEnd.gif}

    稍加解释,这段代码就是把从服务器段动态取回来的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赋值就行了。。。
None.gif var  treeData  =  data.substring(data.indexOf(' > ') + 1 , data.length - 7 );
None.gifchildTreeContent.innerHTML 
=  treeData;
None.gif
var  childTree  =  childTreeContent.children( 0 );
None.gif
if  ( childTree  &&  childTree.rows.length  >   0  )
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
this.UpdateProfileIcon(childTree.rows[0]);
InBlock.gif    
var treeview = this.GetTreeView(node);
InBlock.gif    treeview.CheckedNodes 
= this.GetAllCheckedNodes(treeview);
InBlock.gif    treeview.SelectedNodes 
= this.GetAllSelectedNodes(treeview);
ExpandedBlockEnd.gif}
    // 只是要用substring方法"手工"移掉作为container的span元素。

    下午正被这个问题搞得一筹莫展的时候,同事还又发现了IE一个同样让人抓狂的限制:
    · JScript中的eval无法处理超过65535元素的Array

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值