10

ASP.NETでbrowserCaps機能を無効にすることは可能ですか?

私のサイトが、機能に関係なくすべてのブラウザーに定義されているとおりに、確実かつ正確に提供されることを望んでいます。

彼らのブラウザがサイトをサポートできない場合、それは彼らの問題です。私のサイトは、機能しなくなったクライアントに対応するために、自分自身を劣化させようとするようなものであってはなりません。

これは、スパイダーの運が悪かったように思われる場合に非常にイライラします。サイトをクロールし、サイトのバージョンが低くなると、出力キャッシュがストリップされたファイルを提供するようになります。

4

2 に答える 2

4

ページ ディレクティブまたは 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

もう 1 つのオプションは、サイトの App_Browsers フォルダー (デフォルトの Asp.NET フォルダー) に.browserファイルを追加することです。正規表現を使用してすべてのブラウザーをターゲットにし、機能を追加して通常のブラウザー検出を無効にする必要があります。これを使用して、Safari でメニュー コントロールを正しい方法でレンダリングするだけですが、すべての出力に対して一度にこれを行う方法が正確にはわかりません。

于 2010-10-07T10:07:02.663 に答える
3

私が現在試している非常識な回避策HttpCapabilitiesDefaultProviderは、 static を返す独自のものを注入することですHttpBrowserCapabilities。秘訣は、常に同じ機能オブジェクトを返すことです。したがって、base.GetBrowserCapabilitiesIE9 を使用しながら呼び出すことで、Newtonsoft を使用してシリアライゼーションを作成し、この文字列をソースに保存することで、ブラウザーに関係なく IE9 のような機能オブジェクトを構築できます。要求を開始しました。

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();

ただし、これは実際にはテストされておらず、この変更の影響が正確に何であるかは不明です.

于 2014-10-01T09:56:38.800 に答える