从HTML字符串代码中获取dom而不执行它

get dom from html string code without executing it

本文关键字:执行 dom 获取 HTML 字符串 代码      更新时间:2023-09-26

我需要解析一个html字符串来获得一个特殊的节点,并丢弃其他的,如脚本标记

例如,我使用以下代码;

//I get the htmlCode from a textArea
htmlCode = '<video>'+
               '<source src="/media/video.oga">'+
               '<source src="/media/video.m4v">'+
               '<script src="evilscript.js"></script>'+
           '</video>';
var div = document.createElement('div');
div.innerHTML = htmlCode;

从那里我可以访问div的节点并丢弃不必要的;但我意识到在网络标签中,作业启动了视频来源的请求。我不想发出任何请求,因为任何恶意脚本都可能在htmlCode中。那么我如何在不启动httprequest的情况下修改htmlCode呢?

我想到了documentFragment,但它不能使用innerHTML,它使用appendChild。

所以我想到了document.implementation.createHTMLDocument()

所以我测试了它,它工作。它不从源发出任何http请求。

这是我现在的代码:

var dom = document.implementation.createHTMLDocument();
dom.body.innerHTML = '<video>'+
           '<source src="/media/video.oga">'+
           '<source src="/media/video.m4v">'+
           '<script src="evilscript.js"></script>'+
       '</video>';

从这里我可以访问dom