.NET Framework 2.0 中的 SmartNavigation和1.1中實作是一樣的,但有三個地方有變動:
第一個是增加了一個狀态參數"__smartNavPostBack",它由一個隐藏域來實作的,在attachForm到IFrame
__smartNav上的時候,動态插入到From中。他的狀态在 window.__smartNav.init
被置為了true(預設是false),但是這個狀态并沒有在整個Smart
Navigate的過程被使用,這個可能是給别的代碼使用的狀态,告訴别人這個頁面已經是被Smart Navigation控制了。
第二個是增加了對CSS更新的更新,怎麼這麼繞口呢?這是因為如果CSS檔案是動态更新的,Smart Navigate也應該保證它能被更新到我們實際的那個document中去,而這個在1.1的實作中被M$忽略掉了。代碼是:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLl52bO9CXzJ3b0F2YpRmbJdmbp5WasRXdP9CXzV2Zh1WSvwVbvNmLzd2bsJmbj5yd3d3Lc9CX6MHc0RHaiojIsJye.gif)
var ss = document.styleSheets;
for (var i = 0 ; i < ss.length; i++) {
ss[i].href = ss[i].href;
}
原理和我們常用 document.location = document.location一樣了。
第三個也是修複bug。1.1中對JScript更新的更新居然是采取的和更新CSS一樣的方法,代碼是:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLl52bO9CXzJ3b0F2YpRmbJdmbp5WasRXdP9CXzV2Zh1WSvwVbvNmLzd2bsJmbj5yd3d3Lc9CX6MHc0RHaiojIsJye.gif)
var sc = document.scripts;
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLl52bO9CXzJ3b0F2YpRmbJdmbp5WasRXdP9CXzV2Zh1WSvwVbvNmLzd2bsJmbj5yd3d3Lc9CX6MHc0RHaiojIsJye.gif)
for (var i = 0; i < sc.length; i++)
{
sc[i].text = sc[i].text;
這個方法在2.0中被更改了,而把CSS用這個方法來更新了。為什麼要這樣做呢?我覺得是腳本的優先級高吧,因為如果頁面依賴腳本,而腳本不能保證被更新,那麼這個頁面就什麼都幹不了,而CSS如果不能保證被更新,最多也就是顯示外觀有點問題。是以在2.0中,M$專門做了一個函數
window.__smartNav.loadScript 來更新Script,代碼是:
window.__smartNav.loadScript = function() {
var allScriptLoaded = true;
for (var i = 0; i < sc.length; i++) {
if (sc[i].src != null && sc[i].src.length > 0) {
if (sc[i].readyState != 'loaded' && sc[i].readyState != 'complete' && sc[i].readyState != 'interactive') {
allScriptLoaded = false;
}
}
if (allScriptLoaded) {
for (var i = 0; i < sc.length; i++) {
sc[i].text = sc[i].text;
if (typeof(window.onload) == "string")
{
try { eval(window.onload) } catch (e) {};
else if (window.onload != null)
try { window.onload() } catch (e) {};
else {
setTimeout('window.__smartNav.loadScript();', 100);
};
這個函數是自觸發的,如果腳本裝載不能loaded、complete或interactive,它将以10Hz的頻率去反複嘗試。
本來以為Framework 2.0的SmartNavigation能讓人有個驚喜,因為近來被Gmail的WebMail刺激了,結果還是有那麼一點點讓人失望。
本文轉自部落格園鳥食軒的部落格,原文連結:http://www.cnblogs.com/birdshome/,如需轉載請自行聯系原部落客。