Лучше не вставлять HTML-код, полученный с удаленного сервера, прямо в ваш привилегированный документ - это уязвимость безопасности.Даже если вы контролируете сервер и абсолютно уверены, что сервер никогда не будет взломан, данные могли быть изменены в пути.Используя innerHTML, вы можете запускать код JavaScript, который был отправлен вместе с кодом HTML, и этот код JavaScript будет выполняться с привилегиями ваших расширений (что означает, что он может выполнять практически все).
Вы должны создать <iframe>
и убедитесь, что между вашим документом и этим фреймом есть граница безопасности (это делает type = "content").Примерно так:
var myHTML = XHR.responseText;
var tempFrame = document.createElement("iframe");
tempFrame.setAttribute("type", "content");
tempFrame.setAttribute("src", "data:text/html;charset=utf-8," + encodeURIComponent());
document.documentElement.appendChild(tempFrame);
tempFrame.contentWindow.addEventListener("load", function()
{
tempFrame.contentDocument.documentElement;
tempFrame.contentDocument.getElementsByTagName('a');
...
tempFrame.parentNode.removeChild(tempFrame);
}, false);
Конечно, все будет проще, если у вас хорошо сформированный XML.Затем анализ выполняется просто:
var doc = new DOMParser().parseFromString(XHR.responseText, "text/xml");
doc.documentElement;
doc.getElementsByTagName('a');
Редактировать : все изменилось после того, как я написал это - начиная с Firefox 10 вы также можете использовать DOMParser()
для HTML-кода, который не 'т хорошо сформирован.Поэтому, если вам просто нужно извлечь некоторые данные из фрагмента HTML-кода, вам не следует использовать фреймы, а скорее parseFromString(..., "text/html")
.