Javascript 适用于 FF / IE 但不适用于 Chrome / Safari

Posted

技术标签:

【中文标题】Javascript 适用于 FF / IE 但不适用于 Chrome / Safari【英文标题】:Javascript works in FF / IE but not Chrome / Safari 【发布时间】:2009-08-17 00:46:27 【问题描述】:

我正在开发一个 Drupal 6 模块,在该模块中我使用 jquery(更具体地说,是 $.ajax 方法)从 Yahoo 的天气 API 检索 RSS 提要。我决定不使用 JFeed 库,因为我需要访问带有“yweather”前缀的元素(而且我找不到通过 JFeed 访问它们的方法)。我决定使用 $.ajax 方法来解析 XML 响应。下面的 javascript 代码在 Firefox 和 IE 中运行良好,但在 Safari(或 Chrome FWIW)中无法运行:

function parseXml(xml) 
  var atmosphere = xml.getElementsByTagName("yweather:atmosphere");

  var humidity = atmosphere[0].getAttribute("humidity");

  $('#weatherFeed').html("Humidity: " + humidity);
  $('#weatherFeed').append(
     "<div style=\"text-align: center;margin-left: auto; margin-right: auto;\">" + 
     city + ", " + state + "</div>");


function getData()
   $.ajax(
      type:   'GET',
      url:    'proxy.php?url=http://weather.yahooapis.com/forecastrss&p=94041',
      dataType: 'xml',
      success:  function(xml) 
      parseXml(xml);
 
 ); 


if(Drupal.jsEnabled) 
$(function() 
      getData();
      setInterval("getData()", 30000);
      );   

当我在 Safari 中检查错误控制台时,我看到以下错误消息:TypeError: Result of expression 'atmosphere[0]' [undefined] is not an object. 在 Safari 中使用 getElementsByTagName 是否有问题?我应该以不同的方式访问 getElementsByTagName 返回的对象吗?

【问题讨论】:

【参考方案1】:

也许只是将 XML 视为数据并使用 jQuery 选择器来提取您想要的内容。

$(xml).find("yweather:atmosphere").attr("humidity") - 你可能需要使用过滤器而不是查找 - 你怎么看?

【讨论】:

此代码使错误在 Safari 中消失,但尚未返回有效值(仍然“未定义”)。我在 Firefox 中对此进行了测试,一切似乎都在那里工作......【参考方案2】:

我遇到了完全相同的问题,但在这里找到了答案: http://reference.sitepoint.com/javascript/Document/getElementsByTagName

它与 yweather 命名空间有关。请改用 getElementByTagNameNS 函数。

var atmosphere = xml.getElementsByTagName("yweather:atmosphere");

变成

var atmosphere = xml.getElementsByTagNameNS("http://xml.weather.yahoo.com/ns/rss/1.0","atmosphere");

功能参考: http://reference.sitepoint.com/javascript/Document/getElementsByTagNameNS

【讨论】:

【参考方案3】:

您是否尝试过在 Chrome 和 Safari 中使用大气[1] 而不是 0?

【讨论】:

是的,我刚刚尝试过,并在 Safari 中收到与以前相同的错误消息(TypeError: Result of express 'atmosphere[1]' [undefined] is not an object.

以上是关于Javascript 适用于 FF / IE 但不适用于 Chrome / Safari的主要内容,如果未能解决你的问题,请参考以下文章

CSS 适用于 FF 和 IE,但不适用于 Chrome

JQuery $(this).text().length 仅适用于 IE,不适用于 Chrome、IE 或 FF [重复]

为啥我的 jquery 表单验证不适用于 IE7?它适用于 FF、Opera、Safari 等

如何在适用于 IE7、IE8 和 FF 的 jqGrid 上实现自动换行

Favicon 在 IE11 中不起作用;适用于 FF 和 Chrome

Box-Shadow 适用于 Chrome,但不适用于 Firefox 或 IE