Как оценить XMLHttpRequest

#javascript #dom #xmlhttprequest #tampermonkey

Вопрос:

Я пытаюсь создать скрипт tampermonkey с помощью firefox, в котором я использую запрос XMLHttpRequest для извлечения внешней информации, но я продолжаю получать ту же ошибку в консоли: «Неперехваченное исключение DOMException: узел не может использоваться в документе, отличном от того, в котором он был создан». Я не хочу использовать текст ответа для поиска нужной мне информации, я хочу превратить его в DOM, к которому я могу применить оценку и ссылки на элементы. Но то, как я это делаю, похоже, не работает. Кто-нибудь знает, как я могу с этим справиться?

 GM_xmlhttpRequest({
        method: "get",
        url: someurl,
        onload: function(responseDetails) {
            if(responseDetails.readyState == 4 amp;amp; responseDetails.status == 200){
                    var parser = new DOMParser()
                    var to_DOM = parser.parseFromString(responseDetails.responseText, "text/html")
                    alert(to_DOM.evaluate("//tr[@bgcolor]/b[1]",document,null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,null).snapshotItem(0).innerText)
            }
        }
})
 

Комментарии:

1. Почему вы ссылаетесь на документ веб-страницы, а не на документ, который вы только что создали?

2. Точно, я сам только что понял это минуту назад, лол. Работает и сейчас. Thx, хотя 🙂

Ответ №1:

Вы ссылаетесь на документ, загруженный в браузер, а не на документ, созданный вами.

 const parser = new DOMParser()
const responseText = "<html><body><p><strong>Hello World</strong><p></body></html>";
const doc = parser.parseFromString(responseText, "text/html");
console.log(document.evaluate("//p/strong", doc, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null).snapshotItem(0).innerText)