iOS6.0を実行している第3世代iPadのSafariブラウザーで実行されているASP.NETWebアプリケーションで、断続的な問題の原因を特定するのに非常に苦労しています。場合によっては、<a>
JavaScriptを介してポストバックを実行するハイパーリンクとして設定されたタグが突然機能を停止し、画面上でそれらに触れても何も実行されないように見えることがあります。これらには、ログアウトリンクとして設定されたasp:LinkButtonコントロール、および行の並べ替えを許可するように設定されたGridViewのヘッダー行が含まれます。その背後には韻や理由がないようです-しばらくは通常どおりに動作し、その後停止します。後で再び動作を開始することに気付きます(ほとんどの場合、Safariを閉じて再度開いた後ですが、常にそうとは限りません)動作するようです)。
ログアウトコントロールは、aspxファイルでは次のようになります。
<asp:LinkButton ID="LogoutButton" onclick="LogoutButton_Click" runat="server">[ Logout ]</asp:LinkButton>
結果のHTMLでは次のように表示されます。
<a id="LogoutButton" href="javascript:__doPostBack('ctl00$LogoutButton','')">[ Logout ]</a>
iPadで実行されているSafariについて、ページや他の開いているブラウザタブに読み込まれるデータが多すぎる、またはこのシナリオで動作しているViewStateの何かなど、そのようなリンクがときどき壊れないようにする特別なものはありますか?iPadでWebアプリケーションをしばらく遊んだ後でも、問題を再現するための特別な方法が見つからないため、問題を修正することすらできないので、本当にイライラするので、探しています。 ASP.NETアプリを開発し、iPadやSafari環境をよく知っている人からのガイダンス。デスクトップブラウザでこの問題が発生したことはありません。
更新: iPadのSafariに疑似ソースの表示オプションを追加する方法についてこのページで概説されているトリックを使用して、ポストバックリンクが機能しているページの生成されたHTMLの違いを確認できるようになりました。停止したページ。つまり、 ASP.NETが通常ページに埋め込む__doPostBack JavaScript関数は、何らかの理由で埋め込まれなくなるだけです。その結果、リンクに関連付けられたJavaScriptは単にエラーになります。ポストバックリンクを機能させるために、ASP.NETが通常ページに追加するものは次のとおりです。
<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['form1'];
if (!theForm) {
theForm = document.form1;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
//]]>
</script>
これは、 AppleサポートフォーラムおよびここSOで説明されているのと同じ問題のようです。後者は、ASP.NETがiPad上のSafariをJavaScript対応として認識できないことがあり、そのため__doPostBack関数をページに適切に挿入しない可能性があることを示唆しています。ただし、私のページの他のJavaScriptはまだ正常に機能しているため、問題を完全に説明することはできません。