Странная проблема с Google Maps и Ajax в Google Chrome и Safari - PullRequest
2 голосов
/ 26 января 2010

Я занимаюсь разработкой веб-приложения с использованием API Карт Google и ASP.NET Ajax. Вот мой JavaScript-код для PageLoad:

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

Первый запуск прошел успешно. Но после выполнения некоторой ASP.NET Ajax-функции мы имеем странный эффект: в Internet Explorer, Mozilla Firefox и Opera все хорошо, но в Google Chrome и Safari текст с html-тегами невидим. Другими словами, в Google Chrome у нас есть текст: «Привет,!»

Я хочу сделать приложение, которое обычно в Google Chrome и Safari тоже. Как мне это сделать?

Обновление:

String "Hello, <b>world</b>, <strong>world</strong>, <span style='font-weight: bold;'>World</span>, <a href='http://ya.ru'>Link</a>." преобразовать в "Hello, , , , . " (я исследовал DOM). Слова действительно исчезают.

Я наблюдал этот странный эффект для любой Ajax-функции с запросом к серверу.

Update2:

Большое спасибо Koobz за многие наводящие вопросы. Они помогли мне более детально разобраться в проблеме.

Прежде всего, полное описание действий:

  1. Загрузить страницу. У GMap есть несколько маркеров с dblclick-event в JavaScript. Событие Dblclick exec marker.openInfoWindowHtml (/ Мой текст /). / Мой текст / находится в JavaScript моей страницы.
  2. Я дважды щелкаю по маркеру. Я вижу информационное окно с нормальным форматированием
  3. Exec __doPostBack (starndard ASP.NET PostBack)
  4. На стороне сервера JavaScript обновляется с тем же
  5. Сервер вернет некоторую информацию с / My text / на мою страницу
  6. Я дважды щелкаю маркер. Я вижу информационное окно с неправильным форматированием.

Интересный факт, который меня смущает:

Я пытаюсь установить «Привет, world , & lt; b & gt; test & lt; / b & gt;"

Перед функцией Ajax во всех браузерах у меня есть: «Здравствуйте, world , test »

После функции Ajax в Google Chrome и Safari: «Здравствуйте, test »

После функции Ajax в Mozilla, Opera и IE: «Привет, world , test »

Какие функции в Chrome и Safari могут вызывать такое поведение? Теперь я могу написать отдельно необходимый infoWindow-текст для каждого браузера. Но я бы хотел найти нормальный способ решения моей проблемы.

Ответы [ 3 ]

3 голосов
/ 29 января 2010

Нажмите Ctrl + Shift + J, чтобы открыть инструменты разработчика Chrome.

  1. Установите точку останова непосредственно перед вызовом функции, которая нарушает все.
  2. Попытка воспроизвести ошибку.
  3. После того, как достигнута точка останова, проходите по коду, пока текст не исчезнет.
  4. Установить точку останова после первого исчезновения текста.
  5. Повторите этот процесс. Уточняйте свои точки останова, пока не сузите место возникновения ошибки.

Это может быть любое количество вещей. Я понятия не имею, что за Ajax ты делаешь. Вы динамически обновляете контент на своей странице после выполнения запроса? Возможно, этот код обновления изменяет элементы dom, чего не должно быть. Трассировка с использованием описанной выше методологии поможет добиться успеха, если это так.

Если вы используете jQuery, возможно, один из ваших селекторов не в порядке и поглощает контент. Chrome очень хорош, и я сомневаюсь, что это ошибка JavaScript или что-то в этом роде.

Подтвердите ваш HTML. Если вы пересекаете dom, неверная разметка может привести к тому, что chrome "увидит" другую картинку, чем другие браузеры. Просто ищите битые теги и игнорируйте все другие вещи, на которые жалуется валидатор.


Дикая догадка: но то, как он удаляет HTML, может указывать на какую-то защиту XSS. Является ли сценарий Ajax, который возвращает новый HTML-код, в другом домене, чем тот, который просматривает посетитель?

Некоторая информация здесь: http://groups.google.com/group/chromium-dev/browse_thread/thread/d2931d7b670a1722/d56bdfccfcef677f

2 голосов
/ 29 января 2010

Видите ли вы проблему с какими-либо HTML-тегами в информационном окне? В качестве эксперимента попробуйте:

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

Мне интересно, есть ли где-нибудь в DOM незамеченный жирный тег?

Я балуюсь этой проблемой, но я не смог ее воспроизвести. Было бы полезно взглянуть на то, что делает функция Ajax.

1 голос
/ 29 января 2010

Попробуйте это:

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

сильная метка более соответствует стандартам, стоит попробовать

Как уже говорили другие, вам нужно опубликовать свой код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...