我遇到了一个有趣的问题,我害怕可能是Safari的错误,或者我只是没有看到。XMLDocument(通过jQuery ajax调用)存储为localStorage中的字符串结果Safari没有找到标题元素
我有一个“游戏”元素的静态XML文件。其中每一个都是“标题”元素,等等。
我通过jQuery的ajax方法拉取XML文件,传递文本的dataType,然后将结果存储在localStorage中。
如果我然后从localStorage中提取这些数据并通过jQuery解析它,我可以成功解析IE 9,Chrome 10,Opera 11,Firefox 4中XML内的所有元素。但是,在Safari 5和Safari当前为iPod Touch和iPad(均为当前版本),所有元素都以作为标题元素的文本(XML内)的例外输出。
编辑:如果将元素从“标题”更改为“标题”以及“名称”,则会发生同样的情况如果我将其更改为'xName'之类的信息,那么信息就会很好,所以我的代码看起来没问题。
相关的jQuery电话:
$(document).ready(function() {
$.ajax({
url: "/xml/video_games.xml",
dataType: 'text', // We'll grab it as text, so we can save it into localStorage
success: function (data) {
videoGameXml = data;
localStorage['VideoGameXml'] = videoGameXml;
addDataToPage(videoGameXml);
}
});
});
addDataToPage:
function addDataToPage(data) {
$('#MainData').hide();
var htmlOutput = "<ol>";
try {
$(videoGameXml).find("game").each(function() {
if ($(this).attr('addOn') != "true" && $(this).find('own').text() == "yes") {
// Displays console and version elements, but not the title.
htmlOutput += "<li><strong>" + $(this).find('title').text() + "</strong> for the " + $(this).find("console").text() + " " + $(this).find("version").text() + "</li>";
}
});
} catch (e) {
JamesRSkemp.dumpObject(e);
}
htmlOutput += "</ol>";
$('#MainData').html(htmlOutput);
$('#MainData').show();
}
如果我恢复并跳过localStorage的一步然后标题正确显示。但是,这并没有太大的帮助,因为该页面的目的是可用离线,我宁愿使用所有当前浏览器支持的内容。
我也从静态XML文件中提取数据,因此将数据更改为JSON必须在页面上完成,否则我必须设置服务来解析XML并返回JSON。如果需要的话,我并不反对做其他事情,但是...我宁愿改变元素名称。
我也不反对将输出HTML存储到localStorage而不是XML数据,但我宁愿让所有的XML都可用,而不仅仅是我现在选择输出的内容(对于额外的在路上的功能)。
您可以在http://media.jamesrskemp.com/xmlHtml/video_gamesSO.html