2010-10-06 9 views
8

क्या ASP.NET में ब्राउज़र कैप्स कार्यक्षमता को अक्षम करना संभव है?क्या ASP.NET में ब्राउज़र कैप्स कार्यक्षमता को अक्षम करना संभव है?

मेरी इच्छा है कि मेरी साइट विश्वसनीय रूप से परोसा जाए और ठीक उसी तरह जैसा कि मैंने अपनी क्षमताओं के बावजूद सभी ब्राउज़रों को परिभाषित किया है।

यदि उनका ब्राउज़र साइट का समर्थन नहीं कर सकता है, तो यह उनकी समस्या है। मेरी साइट कुछ नहीं होनी चाहिए कि निष्क्रिय ग्राहक को समायोजित करने के लिए खुद को अपनाने का प्रयास कैसे किया जाए।

यह बहुत निराशाजनक है जब ऐसा लगता है कि मकड़ियों की बुरी किस्मत है, मुझे लगता है कि साइट को क्रॉल करना, साइट के कम संस्करण को प्राप्त करना जिससे आउटपुट कैशिंग को छीनने वाली फ़ाइल की सेवा मिलती है।

+0

@Svend क्या आप यह भी जानते थे कि उपयोगकर्ता एजेंट को बदलने से आउटपुट को बंडलिंग/मिलिफिकेशन में बदल सकता है? [इस एसओ पोस्ट] में शामिल (http://stackoverflow.com/q/21991736/1810243) और गहराई में थोड़ा और [इस ब्लॉग पोस्ट में] (http://www.mikesmithdev.com/blog/aspnet-bundling -Changes-उत्पादन-साथ-उपयोगकर्ता-एजेंट-यूरेका-1 /)। – MikeSmithDev

+0

@ माइकस्मिथडेव नहीं, लेकिन मुझे आश्चर्य नहीं है। मैंने पहले phantomjs और यह "फीचर" के साथ wrangled है। वर्तमान अवतार जो मैं देख रहा हूं वह HTML टेक्स्ट एन्कोडिंग है, हम क्रोम में Ã ¸ या IE में ø के रूप में प्रस्तुत किए जाने वाले 'ø' को देख रहे हैं, मजाकिया बात यह है कि जब हम स्थानीय रूप से वेबसाइट चलाते हैं तो प्रतिपादन को उलट दिया जाता है (IE दो इकाइयां मिलती हैं, जबकि क्रोम एक प्राप्त करता है)। – Svend

+2

@MikeSmithDev कार्यक्षमता टॉगल करने के लिए ब्राउज़र कैप फ़ाइल का उपयोग करना शायद पिछले 10 मिनट में वेब तकनीकों में मैंने देखा है सबसे ख़राब बात है। – Svend

उत्तर

2

आप पृष्ठ निर्देश में या Page.Init में ClientTarget = "uplevel" रख सकते हैं

<%@ Page ClientTarget="uplevel" ...... %> 

या

Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) _ 
     Handles Me.Init 
    Page.ClientTarget = "uplevel" 
End Sub 

एक अन्य विकल्प आपकी साइट के लिए एक .browser फ़ाइल जोड़ने के लिए है, में फ़ोल्डर App_Browsers (एक डिफ़ॉल्ट Asp.NET फ़ोल्डर)। इसे सभी ब्राउज़र को रेगेक्स अभिव्यक्ति के साथ लक्षित करना चाहिए और किसी भी तरह क्षमताओं को जोड़कर सामान्य ब्राउज़र पहचान को अक्षम करना चाहिए। मैं केवल सफारी में मेनू नियंत्रण को सही तरीके से प्रस्तुत करने के लिए इसका उपयोग कर रहा हूं लेकिन मुझे बिल्कुल नहीं पता कि सभी आउटपुट के लिए इसे कैसे किया जाए।

2

एक पागल कामकाज जो मैं वर्तमान में कोशिश कर रहा हूं वह है अपने HttpCapabilitiesDefaultProvider जो एक स्थिर HttpBrowserCapabilities देता है। चाल तब हमेशा समान क्षमताओं को वापस करने के लिए होती है, इसलिए IE9 का उपयोग करते समय base.GetBrowserCapabilities पर कॉल करके, हमने न्यूटॉन्सॉफ्ट का उपयोग क्रमबद्धता बनाने के लिए किया है, और इस स्ट्रिंग को स्रोत में सहेजकर, हम आईई 9 को क्षमताओं की तरह बना सकते हैं ब्राउज़र ने अनुरोध शुरू किया।

public class CustomerHttpCapabilitiesProvider : HttpCapabilitiesDefaultProvider 
{ 
    private const string m_IE9Definition = "{\r\n \"$type\": \"System.Web.Mobile.MobileCapabilities, System.Web.Mobile\",\r\n \"UseOptimizedCacheKey\":..... "; 
    private readonly static Lazy<MobileCapabilities> m_Capabilities = new Lazy<MobileCapabilities>(() => JsonConvert.DeserializeObject<MobileCapabilities>(m_IE9Definition), true); 

    public override HttpBrowserCapabilities GetBrowserCapabilities(HttpRequest request) 
    { 
     return m_Capabilities.Value; 
    } 
} 

और फिर Application_Start में प्रदाता बताए:

HttpCapabilitiesBase.BrowserCapabilitiesProvider = new CustomerHttpCapabilitiesProvider(); 

यह वास्तव में हालांकि नहीं परीक्षण किया गया है, वास्तव में क्या इस परिवर्तन का प्रभाव है की अनिश्चित।

+0

मेरे लिए पागल नहीं लगता है जो इसे यथासंभव अक्षम करने के सबसे नज़दीक लगता है। –

संबंधित मुद्दे