【问题标题】:Strange problem with Google Maps and Ajax in Google Chrome and SafariGoogle Chrome 和 Safari 中 Google Maps 和 Ajax 的奇怪问题
【发布时间】:2011-01-09 15:35:43
【问题描述】:

我正在使用 Google Maps API 和 ASP.NET Ajax 开发网络应用程序。这是我用于 PageLoad 的 JavaScript 代码:

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

首次运行成功。但是在执行一些 ASP.NET Ajax-function 后,我们有奇怪的效果:在 Internet Explorer、Mozilla Firefox 和 Opera 中一切正常,但在 Google Chrome 和 Safari 中,带有 html-tags 的文本是不可见的。换句话说,在谷歌浏览器中我们有文本:“你好,!”

我也想制作通常在 Google Chrome 和 Safari 中使用的应用程序。我该怎么做?

更新:

String "Hello, &lt;b&gt;world&lt;/b&gt;, &lt;strong&gt;world&lt;/strong&gt;, &lt;span style='font-weight: bold;'&gt;World&lt;/span&gt;, &lt;a href='http://ya.ru'&gt;Link&lt;/a&gt;." 转换为 "Hello, , , , . "(我检查了 DOM)。文字真的在消失。

我观察到这种对服务器的请求对任何 Ajax 函数的奇怪影响。

更新2:

非常感谢 Koobz 提出的许多重要问题。他们帮助我更详细地了解了问题。

首先,完整的动作描述:

  1. 加载页面。 GMap 在 JavaScript 中有几个带有 dblclick-event 的标记。 Dblclick 事件执行标记.openInfoWindowHtml(/My text/)。 /My text/ 位于我页面的 JavaScript 中。
  2. 我双击标记。我看到一个格式正常的 infoWindow
  3. Exec __doPostBack(标准 ASP.NET PostBack)
  4. 在服务器端 JavaScript 更新为相同的
  5. 服务器将一些信息与 /My text/ 一起返回到我的页面
  6. 我双击标记。我看到一个格式错误的 infoWindow。

一个有趣的事实,让我很尴尬:

我尝试设置为“Hello, world, <b>test</b>”

在所有浏览器中的 Ajax 功能之前,我都有:“Hello, world, test

Google Chrome 和 Safari 中的 Ajax 功能后:“Hello, ,test

Mozilla、Opera 和 IE 中的 Ajax 功能后:“Hello, world, test

哪些 Chrome 和 Safari 具有可能导致此类行为的功能?现在我可以为每个浏览器分别编写必要的 infoWindow-text。但是我想找到一个正常的方法来解决我的问题。

【问题讨论】:

  • 是否可以发布指向违规页面的链接?
  • @Cannonade,很遗憾,我正在处理一个无法发布的项目。
  • 你能再贴一些代码吗? AJAX 函数有什么作用?
  • 安装 Firebug,右键单击文本(如果可能),选择“检查元素”。
  • @DreamWalker,您抱怨每次 Ajax 调用都发生了一些事情,但您拒绝显示调用代码。您使用哪个框架来处理 Ajax 请求?您是否使用新的 HTML 填充页面上的任何 HTML 元素? Ajax 调用去哪里了?如果没有这些信息,我认为任何人都无法帮助您。

标签: ajax google-maps safari google-chrome


【解决方案1】:

按 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

【讨论】:

  • +1 我同意。仔细、系统地调试问题肯定会对您有所帮助。
【解决方案2】:

您是否发现信息窗口中的任何 html 标记存在问题?作为一个实验,尝试:

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

我想知道 DOM 中是否有未闭合的粗体标记?

我是messing around 有这个问题,但我无法重现它。看看 Ajax 函数的作用会有所帮助。

【讨论】:

  • @Cannonade,1)我没有打开粗体标签。我用任何 html-tag 都观察到了这种奇怪的效果。看我的编辑。 2)我研究你的例子。尝试更改“geo20.js”中的 dummyAjax,以便 dummyAjax 将请求发送到服务器。我所有的 Ajax 函数都向服务器发送请求。
  • 我很确定 ajax 函数的性质不会导致问题。我添加了基于计时器的 dummyAjax 来尝试将异步修改复制到 DOM。是否可以发布触发 DOM 更改的单个 ajax 响应的代码(删除粗体元素)?
  • Hrm ...我应该澄清一下。当我说自然时,我的意思是它是向服务器发出请求还是只是使用计时器异步执行某些操作。该错误肯定会出现在 Ajax 回调中。这是我们需要看到的:)。
【解决方案3】:

试试这个:

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

strong 标签更符合标准,值得一试

正如其他人所说,您需要发布您的代码。

【讨论】:

  • @Griffo,我在任何 html-tag 中都观察到了这种奇怪的效果。看看我的编辑。
猜你喜欢
  • 1970-01-01
  • 2011-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-30
  • 1970-01-01
  • 2020-06-03
相关资源
最近更新 更多