2

ASP:MenuとWebKitの問題については、一般的にたくさんの投稿があることは知っていますが、私の質問に答えるものが見つかりません。

ASP:MenuApple WebKitブラウザ(Chrome、Safariなど)の問題を解決するために、2つの異なる方法を推奨する人をよく見かけます。しかし、実際にはどちらが優れていますか?ターゲットユーザーエージェント以外のこれら2つのアクションの違いは何ですか?私が見つけた唯一の違いは、2番目もPage_Loadイベントで機能するということです。客観的には優れていると思いますが、違いはわかりません。それぞれがどのように機能しますか?

どちらもPage_PreInit()ベースページの方法で行います。

1.ブラウザアダプタをクリアします。

if (Request.UserAgent.Contains("AppleWebKit"))
{
    Request.Browser.Adapters.Clear();
}

2.クライアントターゲットを変更します。

if (Request.UserAgent.Contains("Safari"))
{
    Page.ClientTarget = "uplevel";
}

GoogleChromeのデフォルトのユーザーエージェントは次のとおりです。SafariとWebKitの両方が含まれているので、対象となるユーザーエージェントが大きな違いではないかと思います。

Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.X.Y.Z Safari/525.13.
4

1 に答える 1

7

さて、他の誰も明らかに知らないので、私は自分でこれを「解決」しました。実際の答えは、ASP.NETはWebKitを使用するブラウザーを「ダウンレベル」ブラウザーとして認識するということです。つまり、最新のHTMLまたはJavaScriptを処理できないと考えられます。これを補うために、ASP.NETは「アダプター」を使用してメニューマークアップを異なる方法でレンダリングします。

状況2(クライアントターゲットの変更)では、クライアントは"uplevel"ブラウザとして認識されるように強制されます。その結果、Internet ExplorerやFireFoxの場合と同様に、メニューは通常どおりにレンダリングされます。

状況1.(ブラウザー・アダプターのクリア)では、クライアントは引き続きダウンレベルと見なされ、古いブラウザーと思われるものを補うためにアダプターが挿入されますが、使用する前に、すべてのアダプターがフラッシュされます。

したがって、技術的には方法2の方が優れていると結論付けます。

  1. アダプターが使用される前に、ダウンレベルのブラウザー補正を効率的に停止します。
  2. ファクトがアプリケーションの他の場所で使用されている場合、ブラウザは上位レベルとして正しく認識されます。
  3. ユーザーが別の目的で合法的に使用できるアダプターはクリアされません。
  4. 問題の説明で述べたように、Page_Loadメソッドではなくメソッドで使用できるPage_PreInitため、継承されたベースページを必要とせずにマスターページに追加できます。
于 2011-04-07T20:07:51.700 に答える