不要加载附加了 innerHTML 的脚本

Don't load scripts appended with innerHTML?

本文关键字:innerHTML 脚本 加载      更新时间:2023-09-26

我正在将整个HTML页面附加到div(抓取)。如何阻止它请求scriptcss文件?我尝试立即删除这些节点,但仍然要求它们。
这是为了浏览器插件,我正在用JS抓取

正如

@adeneo所写的,您不必将html添加到页面中以便从中抓取信息,您可以将其转换为与页面断开连接的DOM树DOM并在那里进行处理。

在jQuery中,它是简单的$("html text here")。 然后你可以使用 API 抓取它,

例如。

 function scrape_html(html_string) {
     var $dom = $(html_string);
     var name = $dom.find('.name').text();
     return name;
 }

没有jQuery:

function scrape_html(html_string) {
    var container = document.createElement('div');
    container.innerHTML = html_string;
    var name = container.getElementsByClassName('name')[0].innerText;
    return name;
}

设置尚未添加到文档中的临时 HTML 元素的 innerHTML 不会执行脚本,并且由于它不属于您的文档,因此也不会应用样式。

这将使您有机会在将 innerHTML 复制到您自己的文档之前去除任何不需要的元素。

例:

var temp = document.createElement('div');
temp.innerHTML = html; // the HTML of the 'other' page.
function removeElements(element, tagName)
{
    var elements = temp.getElementsByTagName(tagName);
    while(elements.length > 0)
    {
        elements[0].parentNode.removeChild(elements[0]);
    }
}
removeElements(temp, 'script');
removeElements(temp, 'style');
removeElements(temp, 'link');
container.innerHTML = temp.innerHTML;