Извлечение xml с GM_xmlhttpRequest - PullRequest
       17

Извлечение xml с GM_xmlhttpRequest

3 голосов
/ 04 августа 2010

Я пытаюсь получить страницу с помощью greasemonkey, а затем извлечь из нее ссылку, вставив ссылку на текущую страницу. У меня проблемы с:

GM_xmlhttpRequest({
method: "GET",
url: "http://www.test.net/search.php?file=test",

onload: function(data) 
{
    if (!data.responseXML) 
    {
        data.responseXML = new DOMParser().parseFromString(data.responseText, "text/xml");
    }
    alert("!");
    var xmldata = data.response.xml;
    var tests = xmldata.getElementsByTagName('test');
    alert(tests[0].innerHTML);
}

});

Страница действительна, и GM_xmlhttpRequest вернул ее правильно в виде строки, когда я пытался ранее, но я не могу понять, как это сделать, чтобы я мог использовать операции с узлами на нем. Заранее спасибо.

Правка - второй связанный вопрос

Как мне обратиться к текущей странице, чтобы я мог передать ее в функцию так же, как я пропустил бы свою извлеченную страницу? Ex

function FindTests(currentpage)
{
    currentpage.getElementById('blah');
}

где я сначала передаю документ, но позже я использую выбранную страницу. Извините, если формулировка сбивает с толку.

1 Ответ

2 голосов
/ 07 августа 2010

если запрашиваемая страница имеет форматирование xml, значит, вы находитесь на правильном пути.
но вы должны изменить data.response.xml на data.responseXML

и я ДУМАЮ, что вы не можете сделать это с XMLDocument (результатом парсера xml), потому что .getElementById работает в HTMLDocument.
однако для правильного HTMLDocument вы могли бы сделать следующее:

if (/^Content-Type: text\/xml/m.test(data.responseHeaders)) {
    data.responseXML = new DOMParser().parseFromString(data.responseText, "text/xml");
}
else if (/^Content-Type: text\/html/m.test(data.responseHeaders)) {
    var dt = document.implementation.createDocumentType("html", "-//W3C//DTD HTML 4.01 Transitional//EN", "http://www.w3.org/TR/html4/loose.dtd");
    var doc = document.implementation.createDocument(null, null, dt);

    // I have to find a workaround because this technique makes the html*/head/body tags to disappear.  
    var html = document.createElement('html');
    html.innerHTML = data.responseText;
    doc.appendChild(html);

    data.responseXML = doc;
}

источник: http://userscripts.org/scripts/review/56489

...