#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)