iOSデバイスのフルスクリーンモードでのASP.NET Webアプリケーションでのポストバック操作を修正


それはすべて、iPadのメイン画面でWebアプリケーションを修正した後、Webアプリケーションの1つが正しく動作しなくなったという事実から始まりました。 より正確には、初めてすべてがうまくいったとき。 しかし、その後-多くの機能は単に動作しませんでした。 最初は、Webアプリケーションのコードに何らかのエラーがあると考えました。 しかし、コードと詳細説明の詳細な調査の後、すべてがブラウザにあることが判明しました。
むしろ、フルスクリーンモードで。 メインアプリケーションに保存するまで、iPad上でWebアプリケーションは見栄えがよくなります。

問題は何であり、それを解決する方法-あなたはさらに学びます。


Habarauser MarcusAureliusの記事「 サイトの適応とiOS向けAJAX Webアプリケーションの違い 」では、Safariを使用する際の主なニュアンスと驚きについて既に書いています。 ただし、これは、Web開発者がこのブラウザーで作業するときに期待できる驚きのすべてではありません。 判明したように、iOS上のSafariは、ASP.NETイベントポストバックモデルを常に正しくサポートするとは限りません。

WebアプリケーションをiOSのメイン画面に追加することにした場合、一見したところすべてが見栄えが良くなります。 何らかの理由で、アプリケーションが再起動されるまで。 その後、このブラウザではイベントポストバックスクリプトは完全に動作しなくなります。
問題の唯一の解決策は、メイン画面からアプリケーションを削除し、そこに再度追加した後です。 もちろん、それは悪いことであり、そのような作業シナリオは価値がありません。
インターネットを少し歩き回った後、私はこれがすでによく知られている問題であることを発見し、 このサイトで素晴らしい解決策を見つけました。

理由

問題の本質は、iPad、iPhone、およびiPod Touchが異なるUserAgent回線を使用していることです。通常モードでは、Webサイトがメイン画面から開始されます。


解決策


非標準のUserAgentのため、iOS用のSafari文字列は、クライアントスクリプトをサポートする古いブラウザーとして定義されています。 この問題を解決するには、このブラウザが新しい世代に属していることを手動で示す必要があります。
これを行うには、 ClientTargetページのプロパティを設定します。 デフォルトでは、このプロパティには2つの値を設定できます。


OnPreInitメソッドをオーバーライドして、次のコードをベースページに追加することをお勧めします。

protected override void OnPreInit(EventArgs e) { base.OnPreInit(e); if (Request.UserAgent != null && Request.UserAgent.IndexOf("AppleWebKit", StringComparison.CurrentCultureIgnoreCase) > -1) { this.ClientTarget = "uplevel"; } } 


したがって、すべてのAppleWebKitベースのブラウザーは、クライアント側スクリプトをサポートするものとして定義されます。

そしてUserAgentについてもう少し


プロジェクトが十分に古く、.NET Framework 1.1の時代に開発が開始された場合、バージョン4にアップグレードした後にこのエラーが発生する可能性があります。
ページは非同期ポストバックを実行していますが、ScriptManager.SupportsPartialRenderingプロパティはfalseに設定されています。 非同期ポストバック中にプロパティがtrueに設定されていることを確認してください。


これは、UserAgentの予想サイズをweb.configファイルで明示的に設定できるためです(最大64文字)。
  <browserCaps userAgentCacheKeyLength="64" /> 

問題を解決するには、この値を、たとえば256文字に増やす必要があります。
この問題については、 ここで詳しく説明します



操作後、Webアプリケーションは通常モードとフルスクリーンSafariモードの両方で正常に動作します。

文献と情報源


Source: https://habr.com/ru/post/J148239/


All Articles