恩達

          可愛的兒子--陽陽坨

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            43 隨筆 :: 14 文章 :: 55 評論 :: 0 Trackbacks
          原貼地址:http://birdshome.cnblogs.com/archive/2006/06/23/control_browser_title.html
          ?
          IE以及任何目前瀏覽器的標(biāo)題欄,原本都應(yīng)該是由<title>這個HTML標(biāo)簽來控制的,當(dāng)然現(xiàn)在仍然也是。只是目前的鬼趨勢是,你最好不要再刷新你的網(wǎng)頁頁面了,然后還需要接受用戶的任意蹂躪。這也就是傳說中神龍見首不見尾,殺人于無影無形的悖時Ajax技術(shù)!

          ????在瀏覽器的標(biāo)題欄中顯示貼切的頁面標(biāo)題,是一個網(wǎng)頁專業(yè)的表現(xiàn),同時也能對搜索引擎友好。當(dāng)然如果放上適當(dāng)?shù)奶崾拘畔ⅲ矔苡幸饬x。那么怎么"動態(tài)"的來定制這個標(biāo)題內(nèi)容呢?

          ????我們知道使用ASP動態(tài)修改瀏覽器title,大概是這樣的語句:
          ????<title><%?=?GenerateTitle?%></title>


          ????而在ASP.NET 1.1中,除了仍可以使用上面的方法外,我們多了一個看起來"很美"的方法:

          ????In?aspx?page:?
          ????????
          <title?id="cltTitle"?runat="server"></title>

          ????In?CS?file:?
          ????????protected?HtmlGeneralControl?cltTitle;
          ????????. . .
          ????????cltTitle.innerHtml?=?"birdshome's?homepage";


          ??? 今天到了ASP.NET 2.0時代,除了上面的兩種方法,我們還可以更容易的修改<title>內(nèi)容:?

          ???Page.Title?=?"birdshome's?homepage";


          ????不過上面的"動態(tài)"都是在服務(wù)器端修改<title>的內(nèi)容,實際上對于瀏覽器來說<title>標(biāo)簽內(nèi)的內(nèi)容是完全固定的了。下面言歸正傳,仔細來說說在客戶端對IE瀏覽器標(biāo)題欄的控制:

          ??? 對于IE窗口中的頁面,在頁面DOM對象中,document.title屬性是用來代替<title>元素的innerHTML獲取和設(shè)置IE窗口標(biāo)題欄內(nèi)容的。請看下面這個示例:

          <html>
          <body>
          ????<!--?page?content?-->
          ????
          <script?language="javascript">
          ????
          ????document.body.onload?
          =?function
          ()
          ????{
          ????????document.title?
          =?"birdshome's?homepage"

          ????};
          ????</script>
          </body>
          </html>


          ??? 對,就是這么簡單就可以設(shè)置好普通IE窗口的標(biāo)題欄。那么這有什么好說的呢?這時候如果我們把完全相同的代碼放入模態(tài)窗口中執(zhí)行呢?模態(tài)窗口的標(biāo)題欄是否會被修改?試驗結(jié)果卻是讓人沮喪的,完全相同的這段代碼,在模態(tài)窗口中就失靈了。難道模態(tài)窗口提供的DOM和普通窗口不同嗎?其實模態(tài)窗口的DOM和普通窗口是相同的,而不同之處是當(dāng)模態(tài)窗口中的頁面裝載完成后,document.title屬性確實會失效。這就是為什么在上面的示例代碼onload事件中的語句無效的原因。解決這個限制的方法很簡單,就是要在頁面還未裝載完成時就修改document.title,所以在模態(tài)窗口中修改IE標(biāo)題欄就因該使用這樣的代碼:

          <html>
          <body>
          ????
          <!--?page?content?-->
          ????
          <script?language="javascript">????
          ????document.title?
          =?"birdshome's?homepage"

          ????
          </script>

          </body>
          </html>


          ??? 下面是一個包含了以上兩種修改瀏覽器標(biāo)題欄方法的示例,將其保存為"abc.htm"文件,使用IE打開你就能很直觀看到區(qū)別:

          <html>
          <body>
          ????
          <button?onclick="foo()">
          ????????Open
          </button>
          ????
          <script?language="javascript">
          ????document.body.onload?
          =?function()
          ????{
          ????????document.title?
          =?"birdshome's?homepage?(rewrite)"?+
          ?unescape(H_A0);
          ????};

          ????document.title?
          =?"birdshome's?homepage?(first)"?+
          ?unescape(H_A0);

          ????
          function
          ?foo()
          ????{
          ????????window.showModalDialog(
          "abc.htm"
          );
          ????}
          ????
          </script>

          </body>
          </html>


          ??? 結(jié)果是普通IE窗口的標(biāo)題欄會從"birdshome's homepage (first)"快速的變?yōu)?birdshome's homepage (rewrite)",而使用Open按鈕開啟的模態(tài)對話框的標(biāo)題將一直是"birdshome's homepage (first)"。從這個示例中我們可以看出來,對于普通IE窗口,其標(biāo)題欄是可以在頁面生存期的任意時刻進行修改的。而模態(tài)窗口的標(biāo)題欄,我們只能在其頁面裝載完成前(onload事件觸發(fā)前)才能修改。非模態(tài)對話框,opend by showModelessDialog,對于標(biāo)題欄的處理和模態(tài)對話框完全一樣。

          ??? 最后再說一個document.title使用中的技巧,我們知道如果在服務(wù)器端"動態(tài)"修改頁面title時,我們可以向<title></title>標(biāo)簽間寫入&nbps;來在標(biāo)題欄上產(chǎn)生連續(xù)的空格輸入效果。這個技巧在模態(tài)窗口中尤為有用,這樣一來我們就可以把那討厭的" - Web Page Dialog"字樣用連續(xù)空格推到標(biāo)題欄外去。使用document.title屬性來修改頁面標(biāo)題欄后,不管是普通窗口還是模態(tài)窗口,"&nbsp;"和" "(空格)都不能用了,前者會被直接當(dāng)字符串顯示在標(biāo)題欄上,后者添加再多也只有一個" "(空格)的寬度效果。這里我們又要使用另一個空格,實體&#160;來解決這個問題。代碼如下:

          <html>
          <body>
          ????
          <script?language="javascript">
          ????
          var?HexA0s?=?"%A0?%A0?%A0?%A0";
          ????
          ????document.body.onload?
          =?function
          ()
          ????{
          ????????document.title?
          =?"birdshome's?homepage?(rewrite)"?+
          ?unescape(HexA0s);
          ????};
          ????
          </script>

          </body>
          </html>
          posted on 2006-07-20 15:15 恩達 閱讀(532) 評論(0)  編輯  收藏 所屬分類: JAVASCRIPT
          主站蜘蛛池模板: 松原市| 会东县| 巩留县| 扶余县| 斗六市| 新郑市| 双鸭山市| 库车县| 墨竹工卡县| 余干县| 县级市| 五峰| 万荣县| 广德县| 华宁县| 元朗区| 海原县| 花莲县| 云龙县| 武鸣县| 远安县| 齐齐哈尔市| 乐业县| 汝南县| 阿拉善盟| 奇台县| 尼木县| 寿宁县| 马公市| 云阳县| 灵璧县| 邢台县| 永顺县| 宝山区| 屏山县| 延长县| 涡阳县| 兴业县| 芒康县| 仁布县| 抚宁县|