Safari sur l'iPad, occasionnellement, ne reconnaît pas ASP.NET publication de liens
Que je vais avoir vraiment du mal à identifier la source d'un problème intermittent dans un ASP.NET application web qui s'exécute sur le navigateur Safari sur l'iPad de troisième génération en cours d'exécution iOS 6.0. Ce qui se passe est que, à l'occasion, que <a>
tags mis en place comme les liens hypertexte qui ne les publications via JavaScript, soudainement cesser de travailler et ne semblent pas faire quelque chose si vous les touchez sur l'écran. Il s'agit d'un asp:LinkButton de contrôle est défini comme un lien de déconnexion, et la ligne d'en-tête d'un GridView qui est mis en place pour permettre à la ligne de tri. Il semble y avoir ni rime ni raison derrière cela - qu'ils fonctionnent à nouveau normalement pendant un certain temps, puis s'arrête, et je vais plus tard l'avis qu'ils recommencer à travailler (surtout après la fermeture de Safari et de la ré-ouverture, mais cela ne veut pas toujours l'air de fonctionner).
La déconnexion de contrôle ressemble à ceci dans le fichier aspx:
<asp:LinkButton ID="LogoutButton" onclick="LogoutButton_Click" runat="server">[ Logout ]</asp:LinkButton>
et s'affiche comme ceci dans le code HTML obtenu:
<a id="LogoutButton" href="javascript:__doPostBack('ctl00$LogoutButton','')">[ Logout ]</a>
Est-il rien de spécial à propos de Safari en cours d'exécution sur l'iPad qui pourraient les empêcher de tels liens de rompre à l'occasion, comme la trop grande quantité de données chargées sur la page ou dans les autres onglets du navigateur, ou peut-être quelque chose avec le ViewState qui agissent dans ce scénario? Même après avoir joué avec l'application web sur l'iPad pendant un certain temps, je ne peux pas trouver de moyen de reproduire le problème, je ne peux même pas commencer à essayer de corriger ce qui est vraiment frustrant, donc je suis à la recherche pour les conseils de ceux qui ont développé le ASP.NET apps et de savoir l'iPad et/ou Safari environnements vraiment bien. Je n'ai jamais eu ce problème se produit sur un navigateur de bureau.
Mise à jour: à l'Aide de l'astuce décrite sur cette page sur la façon d'ajouter un pseudo-Affichage de la Source de l'option de Safari sur l'iPad, j'ai été capable de voir la différence dans le code HTML généré d'une page où la publication des liens de travail, et une page où il est arrêté. En bref, le __doPostBack fonction JavaScript qui ASP.NET normalement inscrit dans la page... s'arrête tout simplement obtenir intégrés pour une raison quelconque. En conséquence, le JavaScript liées à la liens d'erreur. Voici ce que ASP.NET normalement ajoute à la page pour obtenir la publication des liens de travail:
<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>
Ce qui semble être le même problème décrit sur le Apple forum de support et ici DONC. Ce dernier suggère que ASP.NET peut parfois être incapable de reconnaître Safari sur l'iPad comme JavaScript capable et n'a donc pas insérer correctement la __doPostBack fonction dans la page. D'autres JavaScript sur ma page est toujours dans un travail correct, bien que, de sorte qu'il n'est pas entièrement expliquer mon problème.
OriginalL'auteur Derek | 2012-10-09
Vous devez vous connecter pour publier un commentaire.
Après la découverte d' cette question sur un Débordement de Pile avec pratiquement le même problème, j'ai couru le browserCaps page de sortie proposé par Stephen et a constaté que Safari, lorsqu'il est exécuté en mode plein écran à partir d'un lien sur l'iPad de l'écran d'accueil, apparut à notre ASP.NET serveur en tant que générique, aucune capacité navigateur. J'ai appliqué le correctif proposé par l'Avada Kedavra dans cette autre question, ce qui implique de mettre ceci:
...dans le
<system.web>
section de mon site web.fichier de config, et également ceci:dans le fichier code-behind de la page web principale qui a fait des siennes. Jason Kealey, la source de cette autre personne est corrigé, suggère également dans la section des commentaires de ses conclusions, il pourrait également être utile d'ajouter ce pour un .navigateur de fichiers dans le App_Browsers dossier de votre ASP.NET application web:
Edit:
J'ai appliqué ce correctif à ma demande, mais il s'est cassé d'autres domaines, en particulier, il a été l'identification de Chrome et de Safari "uplevel", ce qui l'a causé d'être détectés dans d'autres domaines comme la "IE". Le code ci-dessous rend ce correctif s'appliquent uniquement aux iDevices lorsqu'il n'est pas identifié dans l'agent utilisateur Safari:
J'ai essayé, ça ne fonctionne pas pour moi, son Ispostback est toujours et n'est pas en pointant à l'événement click
depuis que j'ai posté ce près de quatre ans, vous pouvez peut-être en cours d'exécution dans une variante de ce problème qui n'est pas couvert ici, ou quelque chose de nouveau tout à fait. Vous êtes plus susceptible de résoudre votre problème si vous poster une nouvelle question avec le code exact que vous utilisez liées à votre problème.
OriginalL'auteur Derek
Ce DONC post est similaire, et dit que ceci peut se produire lors de la Sortie de la page mise en Cache est activée.
asp.net: __doPostBack pas rendu parfois
Êtes-vous à l'aide de OutputCache?
Peut-être que vous étiez sur la bonne voie avec la chaîne de l'agent utilisateur et d'obtenir le mauvais navigateur casquettes. Quelle est la version de .NET vous aide? .NET 1.x était horrible à identifier d'autre chose que IE. 2.x (jusqu'à 3.5) n'était pas très bon non plus. Ils ont effectivement fait de bons progrès avec la version 4.0, et ils peuvent identifier certains appareils mobiles en tant que tel (je pense que tous les appareils iOS sont identifiés comme les iPhone). Ma prochaine étape serait de copier le code ici slingfive.com/pages/code/browserCaps/... et parcourir il y a à partir de votre serveur à l'aide de votre iPad pour voir quel navigateur ils pensent que vous êtes en utilisant.
C'est un .NET 4.0 application. J'ai mis le navigateur casquettes de vidage pour Safari sur l'iPad sur pastebin, si vous êtes curieux. Je ne vois pas ce qui saute immédiatement aux yeux comme ce qui pourrait être à l'origine du problème. La Plate-forme est "Inconnu", mais cela ne veut pas forcément expliquer pourquoi le JavaScript fonctionne et d'autres fois pas.
Hmm, il me semble avoir trouvé une autre personne avec le même problème, et j'ai remarqué que mon problème commence souvent après le démarrage de l'application en mode plein écran à partir d'un écran d'accueil sur le lien. Je suis à étudier plus tard.
Ressemble le correctif proposé dans le lien que j'ai énumérés ci-dessus a fonctionné! Vérification du navigateur casquettes pour info lors de mon application a cessé de travailler produite l'annonce vous pouvez voir ici sur pastebin. Stephen, merci encore pour votre aide, je upvoted votre suggestion sur la façon de vérifier le navigateur chapeaux depuis, il m'a conduit vers la bonne réponse, mais je vais résumer ma solution dans une autre réponse, car, au final, il n'était pas liée à la OutputCache.
OriginalL'auteur Stephen
Ayant eu le même problème avec un site en cours d'exécution Umbraco dans AppMode (mode Plein Écran) sur iOS7, j'ai essayé toutes les suggestions ci-dessus, en vain. Cependant, je'vee constaté qu'une légère extension de Regexident la réponse ci-dessus, ajouté à la valeur par défaut du navigateur, semblait faire l'affaire.
Découvrez l'origine post par Aristos
J'espère que cela aide les autres comme il l'a fait pour moi.
OriginalL'auteur Xrimson
J'ai placé ci-dessous la définition dans un navigateur de fichiers en vertu de la App_Browsers dossier et il a marché parfaitement.
��
OriginalL'auteur Mask