2013年9月4日 星期三

[轉貼] 讓Chrome瀏覽器支援MaintainScrollPositionOnPostback屬性


MaintainScrollPositionOnPostback主要功能是在Asp.Net的Page中取得或設定值,指出在回傳後是否將使用者返回用戶端瀏覽器中的相同位置。簡單的說就是讓頁面在PostBack後還能保持頁面位置。

即使我們在Page中設定了MaintainScrollPositionOnPostback為True,但在最近市佔率越來越高的Chrome這個以速度快著名的Goolge瀏覽器卻是失效了。

自己在遇這個問題後,在Google找到此站提供的方式解決了我的問題:
讓Chrome瀏覽器支援Asp.Net的MaintainScrollPositionOnPostback
但此網頁已失連許久,也在Google找不到相同提供解決方法的網頁(也許有,我沒找到)。因此特地在此記錄並提供給有遇到同樣問題的朋友一個解決的辦法。

解決方法:
首先在Asp.Net中新增一個瀏覽器定義檔,我們要使用這個定義檔來根據不同瀏覽器設定不同運行環境參數。
 
.browser建立後預設會放在App_Browesers資料夾中。打開.browser後將以下程式碼直接複製貼上:
<browsers>
    <browser id="Safari3" parentID="Safari1Plus">
        <identification>
            <userAgent match="Safari/\d+\.\d+" />
        </identification>
        <capture>
            <userAgent match="Version/(?'version'\d+\.\d+)" />
        </capture>
        <capabilities>
            <capability name="browser" value="Safari3" />
            <capability name="version" value="${version}" />
        </capabilities>
        <controlAdapters>
            <adapter controlType="System.Web.UI.WebControls.Menu"
                     adapterType="" />
        </controlAdapters>
    </browser>
    <browser id="GoogleChrome" parentID="Safari3">
        <identification>
            <userAgent match="Chrome/(?'version'\d+\.\d+)" />
        </identification>
        <capabilities>
            <capability name="browser" value="Googlebot" />
            <capability name="supportsMaintainScrollPositionOnPostback" value="true" />
        </capabilities>
    </browser>
</browsers>


上面這段程式碼原本主要的用途是用來解決Asp.Net中的Menu控制項,在Chrom與Safari瀏覽器下顯示不完全的問題。詳情可以參考:最簡單的方法,讓 ASP.NET Menu 控件在 Google Chrome 瀏覽器上正常顯示

按照原作者的方法直接在GoogleChrome的定義中加入這一行程式碼:
<capability name="supportsMaintainScrollPositionOnPostback" value="true" />
如此即可解決MaintainScrollPositionOnPostback在Chrome瀏覽器失效的問題了,可謂一舉兩得。

沒有留言:

張貼留言