2010-01-26 7 views
2

Je développe une application web en utilisant l'API Google Maps et ASP.NET Ajax. Voici mon code JavaScript pour PageLoad:Problème étrange avec Google Maps et Ajax dans Google Chrome et Safari

map.openInfoWindowHtml(map.getCenter(),'Hello, <b>world</b>!'); 

La première exécution est réussie. Mais après l'exécution de certains ASP.NET Ajax-fonction nous avons un effet étrange: Dans Internet Explorer, Mozilla Firefox et Opera tout est bon, mais dans Google Chrome et Safari texte avec html-tags est invisible. En d'autres termes, dans Google Chrome, nous avons le texte: "Bonjour,!"

Je veux faire l'application qui serait normalement dans Google Chrome et Safari aussi. Comment puis-je le faire?

Mise à jour:

cordes "Hello, <b>world</b>, <strong>world</strong>, <span style='font-weight: bold;'>World</span>, <a href='http://ya.ru'>Link</a>." transformation à "Hello, , , , . " (j'ai examiné les DOM). Les mots disparaissent vraiment.

J'ai observé cet effet étrange sur Ajax-fonction avec demande au serveur.

Update2:

Un grand merci à Koobz pour de nombreuses questions de premier plan. Ils m'ont aidé à mieux comprendre le problème.

Tout d'abord, la description complète des actions:

  1. Chargez la page. GMap possède plusieurs marqueurs avec dblclick-event en JavaScript. Dblclick event exec marker.openInfoWindowHtml (/ Mon texte /)./Mon texte/est situé dans JavaScript de ma page.
  2. Je double-clique sur le marqueur. Je vois un InfoWindow avec un formatage normal
  3. Exec __doPostBack (starndard ASP.NET PostBack)
  4. En JavaScript côté serveur est mis à jour avec la même
  5. serveur renvoie des informations avec/Mon texte/sur ma page
  6. I Double-cliquez sur le marqueur. Je vois une infoWindow avec un mauvais formatage.

Un fait intéressant, ce qui me met en embarrassant:

J'essaie mis à « Bonjour, <b> monde </b >, & lt; b & gt; essai & lt;/b & gt; »

Avant la fonction Ajax dans tous les navigateurs je: « Bonjour, monde , <b> essai </b > »

Après la fonction Ajax dans Google Chrome et Safari: "Bonjour, essai"

Après la fonction Ajax dans Mozilla, Opera et IE: « Bonjour, monde, <b> essai </b > »

Qu'est-ce que Chrome et Safari ont des caractéristiques qui peuvent causer un tel comportement? Maintenant, je peux écrire séparément infoWindow-text pour chaque navigateur. Mais je voudrais trouver un moyen normal de résoudre mon problème.

+1

Est-il possible d'afficher un lien vers la page incriminée? – RedBlueThing

+0

@Cannonade, malheureusement, je travaille sur un projet que je ne peux pas poster. – AndreyAkinshin

+0

Pouvez-vous poster un peu plus de code? Que fait la fonction AJAX? –

Répondre

3

Hit ctrl + shift + j pour ouvrir vos outils de développement de chrome.

  1. Définissez un point d'arrêt juste avant l'appel de fonction qui casse tout.
  2. Essayez de reproduire le bogue.
  3. Après les coups de point de rupture, étape par votre code jusqu'à ce que le texte disparaît.
  4. Définissez un point d'arrêt après la disparition du texte.
  5. Répétez ce processus. Affinez vos points d'arrêt jusqu'à ce que vous ayez réduit l'emplacement du bogue.

Il pourrait être un certain nombre de choses. Je n'ai aucune idée de ce genre de choses Ajax que vous faites. Mettez-vous à jour dynamiquement le contenu de votre page après avoir fait la demande? Il est possible que ce code de mise à jour modifie les éléments de dom qu'il ne devrait pas être. Traçage en utilisant la méthodologie ci-dessus aidera à le clouer si c'est le cas.

Si vous utilisez jQuery, l'un de vos sélecteurs est peut-être détraqué et il consomme du contenu. Chrome est très bon et j'hésite à croire que c'est un bug javascript ou quelque chose comme ça.

Validez votre code HTML. Si vous parcourez la dom, un balisage non valide peut entraîner une "vision" du chrome différente de celle des autres navigateurs. Il suffit de chercher les étiquettes cassées et d'ignorer toutes les autres choses dont un validateur se plaint.


Wild guess: mais la façon dont il supprime HTML pourrait pointer vers une sorte de protection XSS. Le script Ajax renvoie-t-il le nouveau code HTML sur un autre domaine que celui que le visiteur consulte?

Quelques infos ici: http://groups.google.com/group/chromium-dev/browse_thread/thread/d2931d7b670a1722/d56bdfccfcef677f

+0

+1 Je suis d'accord. Un débogage attentif et systématique du problème vous aidera certainement. – RedBlueThing

+0

Merci beaucoup pour votre question. Regardez à mon édition – AndreyAkinshin

2

Vous voyez le problème avec les balises HTML dans la fenêtre d'information? En tant qu'expérience, essayez:

<span style="font-weight: bold;">World</span>. 

Je me demande s'il existe une balise gras non fermée quelque part dans le DOM?

Je suis messing around avec ce problème, mais je n'ai pas été en mesure de le reproduire. Regarder ce que fait la fonction Ajax serait utile.

+0

@Cannonade, 1) Je n'ai pas ouvert tag gras. J'ai observé cet effet étrange avec n'importe quelle balise html. Regardez à mon édition. 2) Je recherche votre exemple. Essayez de changer dummyAjax dans 'geo20.js' pour que dummyAjax envoie la requête au serveur. Toute ma fonction Ajax envoie une requête au serveur. – AndreyAkinshin

+0

Je suis assez sûr que la nature de la fonction ajax ne cause pas le problème. J'ai ajouté le timer basé * dummyAjax * pour essayer de répliquer la modification asynchrone au DOM. Est-il possible de publier le code pour une seule réponse ajax qui déclenche la modification du DOM (suppression des éléments en gras)? – RedBlueThing

+0

Hrm ... Je devrais clarifier. Quand je dis la nature, je veux dire si c'est faire une demande à un serveur ou simplement faire quelque chose de manière asynchrone en utilisant une minuterie. Le bug sera certainement dans le rappel Ajax. C'est ce que nous devons voir :). – RedBlueThing

1

Essayez ceci:

map.openInfoWindowHtml(map.getCenter(),'Hello, <strong>world</strong>!'); 

l'étiquette forte est plus conforme aux standards, vaut le coup

Comme d'autres l'ont dit, vous devez envoyer votre code.

+0

@Griffo, j'ai observé cet effet étrange avec n'importe quelle balise html. Regardez à mon édition. – AndreyAkinshin