このソリューションは、.NET バージョン < 4.0 にのみ適用されることに注意してください。
だからここにある...
動作するUA: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (Gecko のような KHTML) Chrome/29.0.1547.57 Safari/537.36
動作しない UA: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/600.1.17 (Gecko のような KHTML) バージョン/7.1 Safari/537.85.10
問題は、AppleWebKit/600 への主要なバージョン変更にあります。ASP.NET AJAX は、新しい Safari 8 ブラウザー (iOS 8 も) を正しく認識しません。部分レンダリングのサポートはないと思います。「PageRequestManager.cs」の次の行で見つけました。
bool supportsPartialRendering = (browser.W3CDomVersion >= MinimumW3CDomVersion) && (browser.EcmaScriptVersion >= MinimumEcmaScriptVersion) && browser.SupportsCallback;
MinimumEcmaScriptVersion/MinimumW3CDomVersion は両方とも 1 です。Request.Browser から次の結果が得られました。
W3CDomVersion = 1.0
EcmaScriptVersion = 1.0
SupportsCallback = false
「EcmaScriptVersion」の値がおかしくなっていますが、この問題は主に SupportsCallback が false であることによって引き起こされます。
このバグは、ASP.NET に同梱されている「mozilla.browser」ファイル (「C:\Windows\Microsoft.NET」のどこかにある) にあります。
<browser id="Safari60" parentID="Safari">
<identification>
<capability name="appleWebTechnologyVersion" match="60" />
</identification>
<capture>
</capture>
<capabilities>
<capability name="ecmascriptversion" value="1.0" />
</capabilities>
</browser>
<browser id="Safari85" parentID="Safari">
<identification>
<capability name="appleWebTechnologyVersion" match="85" />
</identification>
<capture>
</capture>
<capabilities>
<capability name="ecmascriptversion" value="1.4" />
</capabilities>
</browser>
<browser id="Safari1Plus" parentID="Safari">
<identification>
<capability name="appleWebTechnologyVersion" match="\d\d\d" />
</identification>
<capture>
</capture>
<capabilities>
<capability name="ecmascriptversion" value="1.4" />
<capability name="w3cdomversion" value="1.0" />
<capability name="supportsCallback" value="true" />
</capabilities>
</browser>
「Safari 85」よりも新しいものはすべて、最後の定義によってキャッチされることを意図していました。しかし、正規表現が乱れているため、「Safari 600」は誤って「Safari60」として検出されます。
<capability name="appleWebTechnologyVersion" match="60" />
になるはずだった
<capability name="appleWebTechnologyVersion" match="60$" />
次の内容のカスタム ファイル「App_Browsers\safari.browser」をアプリケーションに追加することで、この問題を解決しました。
<browsers>
<browser id="Safari60_bugfix" parentID="Safari60">
<identification>
<capability name="appleWebTechnologyVersion" match="^\d{3,}$" /> <!-- At least 3 digits -->
</identification>
<capabilities>
<!-- Same as in "Safari1Plus" -->
<capability name="ecmascriptversion" value="1.4" />
<capability name="w3cdomversion" value="1.0" />
<capability name="supportsCallback" value="true" />
</capabilities>
</browser>
<browser id="Safari85_bugfix" parentID="Safari85">
<identification>
<capability name="appleWebTechnologyVersion" match="^\d{3,}$" /> <!-- At least 3 digits -->
</identification>
<capabilities>
<!-- Same as in "Safari1Plus" -->
<capability name="ecmascriptversion" value="1.4" />
<capability name="w3cdomversion" value="1.0" />
<capability name="supportsCallback" value="true" />
</capabilities>
</browser>
</browsers>