XMLDocument (через ajax-вызов jQuery), сохраненный как строка в localStorage, приводит к тому, что Safari не находит элементы заголовка - PullRequest
0 голосов
/ 25 марта 2011

Я столкнулся с интересной проблемой, которая, боюсь, может быть ошибкой в ​​Safari или чего-то, чего я просто не вижу.

У меня есть статический XML-файл с несколькими элементами «игры». Внутри каждого из них, среди прочего, есть элемент title.

Я извлекаю файл XML с помощью метода jQuery ajax, передавая dataType текста, а затем сохраняю результат в localStorage.

Если я затем извлекаю эти данные из localStorage и анализирую их с помощью jQuery, я могу успешно проанализировать все элементы в XML в IE 9, Chrome 10, Opera 11, Firefox 4. Однако в 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

1 Ответ

1 голос
/ 03 апреля 2011

Я написал в блоге об этом - Интересная функция с анализом XML с помощью jQuery в Safari - но в основном вместо следующего:

$(videoGameXml).find("game").each(...);

Мне нужно было:

$($.parseXML(videoGameXml)).find("game").each(

Safari требует, чтобы дополнительный бит кода правильно обрабатывал строку как XML.

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