2016-07-28 104 views
2

我正在嘗試在Asp.Net中爲邊緣編寫瀏覽器定義文件,以避免將其標識爲「Chrome 46」。邊緣的App_Browsers定義文件

我創建了以下Edge.browser文件中的文件夾App_Browsers

<browsers> 
    <!--Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586-->  
    <browser id="Edge" parentID="Chrome"> 
    <identification> 
     <userAgent match="Edge" /> 
    </identification> 
    <capture> 
     <userAgent match="Edge/(?'version'(?'major'\d+)(\.(?'minor'\d+)?))" /> 
    </capture> 
    <capabilities> 
     <capability name="browser" value="Edge" /> 
     <capability name="version" value="${version}" /> 
     <capability name="majorVersion" value="${major}" /> 
     <capability name="minorVersion" value="${minor}" /> 
    </capabilities> 
    </browser> 
</browsers> 

這符合邊緣的非常好,但這時如果再拍要求與瀏覽器,瀏覽器也被匹配爲邊緣的網站: S

我在做什麼錯?

回答

4

嘗試將定義修改爲:

<browsers> 
    <browser id="Edge" parentID="Chrome"> 
    <identification> 
     <userAgent match="Edge/(?'version'(?'major'\d+)(\.(?'minor'\d+)?)\w*)" /> 
    </identification> 

    <capabilities> 
     <capability name="browser"       value="Edge" /> 
     <capability name="majorversion"     value="${major}" /> 
     <capability name="minorversion"     value="${minor}" /> 
     <capability name="type"       value="Edge${major}" /> 
     <capability name="version"       value="${version}" /> 
    </capabilities> 

    </browser> 
</browsers> 

不要把正則表達式中<capture> -Tag但<identification>

編輯

由於userAgentCacheKeyLength默認情況下限制爲64個,尾隨的字符被切斷並導致你描述的行爲。 幸運的是有一個解決方法。

添加這些線路在web.config

<system.web> 
    <browserCaps userAgentCacheKeyLength="256" /> 
</system.web> 

現在每個基於Chrome瀏覽器應正確顯示,因爲它的全部關鍵是公認

+0

這不起作用:開始你的網站,與邊緣接入它 - > Request.Browser是Edge。現在訪問它與Chrome:Request.Browser也是邊緣 –

+0

@GyumFox答案改進。 – lokusking

+0

使用對配置文件的更改!現在更有意義! –