天天看點

https頁面中出現莫名其妙的安全警告

在IE中通路一個https的頁面,這是一個相對比較安全的操作,是以IE會要求這個頁面内的所有内容皆來自于安全的域。這時候要是頁面中有http的資源,比如圖檔、腳本、頁面(frame或iframe中)等,在IE的預設設定下我們就會得到一個内容安全的警告視窗。而今天遇到的這個警告可以說是莫名其妙到無語。

原來在IE6下我就做過對https頁面的友好支援,IE6似乎比IE7的要求還嚴格,iframe的src指向about:blank都算是不安全,會彈出下面這個安全警告視窗(IE7中指向這個空白頁已經不算不安全了)。

    // 這個視窗看得我都要吐了,今天

經過一天的debug,最後确定了出錯的代碼和出錯場景。代碼如下:

https頁面中出現莫名其妙的安全警告

var span = node.document.createElement('SPAN');

https頁面中出現莫名其妙的安全警告

span.innerHTML = data;

https頁面中出現莫名其妙的安全警告

childTreeContent.innerHTML = String.Empty;

https頁面中出現莫名其妙的安全警告

var tree = span.childNodes[0].childNodes[0];

https頁面中出現莫名其妙的安全警告

if ( tree && tree.rows.length > 0 )

https頁面中出現莫名其妙的安全警告
https頁面中出現莫名其妙的安全警告
https頁面中出現莫名其妙的安全警告

{

https頁面中出現莫名其妙的安全警告

    childTreeContent.appendChild(tree);

https頁面中出現莫名其妙的安全警告

    this.UpdateProfileIcon(tree.rows[0]);

https頁面中出現莫名其妙的安全警告

    var treeview = this.GetTreeView(node);

https頁面中出現莫名其妙的安全警告

    treeview.CheckedNodes = this.GetAllCheckedNodes(treeview);

https頁面中出現莫名其妙的安全警告

    treeview.SelectedNodes = this.GetAllSelectedNodes(treeview);

https頁面中出現莫名其妙的安全警告

}

稍加解釋,這段代碼就是把從伺服器段動态取回來的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指派就行了。。。

https頁面中出現莫名其妙的安全警告

var treeData = data.substring(data.indexOf('>')+1, data.length-7);

https頁面中出現莫名其妙的安全警告

childTreeContent.innerHTML = treeData;

https頁面中出現莫名其妙的安全警告

var childTree = childTreeContent.children(0);

https頁面中出現莫名其妙的安全警告

if ( childTree && childTree.rows.length > 0 )

https頁面中出現莫名其妙的安全警告
https頁面中出現莫名其妙的安全警告
https頁面中出現莫名其妙的安全警告
https頁面中出現莫名其妙的安全警告

    this.UpdateProfileIcon(childTree.rows[0]);

https頁面中出現莫名其妙的安全警告
https頁面中出現莫名其妙的安全警告
https頁面中出現莫名其妙的安全警告
https頁面中出現莫名其妙的安全警告

// 隻是要用substring方法"手工"移掉作為container的span元素。

本文轉自部落格園鳥食軒的部落格,原文連結:http://www.cnblogs.com/birdshome/,如需轉載請自行聯系原部落客。

繼續閱讀