Javascript 替代XMLHttpRequest()o DOMParser.parseFromString从外部网站生成DOMobject?

Javascript 替代XMLHttpRequest()o DOMParser.parseFromString从外部网站生成DOMobject?,javascript,google-chrome-extension,xmlhttprequest,domparser,Javascript,Google Chrome Extension,Xmlhttprequest,Domparser,我正在开发一个扩展,需要采取一个外部网站的HTML,并寻找所有可下载的链接。我写的代码很有用。。。但只是有时候,因为在解析过程中,很多网站都会让解析器在某个时候抛出一个解析错误。有一些网站(设计得足够好,可以毫无问题地解析)所有扩展都可以完美地工作。在其他一些网站中,parseerror使getElementsByTagName无效 我想一个选择是,不使用DOMobject,而是通过读取字符串来查找所有链接。。。但这要复杂得多。关键是,使用chrome extensions dev网站上的Dow

我正在开发一个扩展,需要采取一个外部网站的HTML,并寻找所有可下载的链接。我写的代码很有用。。。但只是有时候,因为在解析过程中,很多网站都会让解析器在某个时候抛出一个解析错误。有一些网站(设计得足够好,可以毫无问题地解析)所有扩展都可以完美地工作。在其他一些网站中,parseerror使getElementsByTagName无效

我想一个选择是,不使用DOMobject,而是通过读取字符串来查找所有链接。。。但这要复杂得多。关键是,使用chrome extensions dev网站上的Downloader extension示例,它可以完美地工作(因为它不是使用外部网站上的DOMobject,而是从当前活动选项卡创建DOMobject)

我还想到了另一种选择,即临时打开网站的新选项卡,从该选项卡加载DOMobject,然后关闭它并继续执行代码,但这是一个非常难看的解决方案(用户会看到选项卡打开和关闭…)

使用当前代码编辑。现在我收到一个文档对象作为响应,但是当我想把它放在一个对象中处理它时,结果是未定义的

    //Get the HTML of the website
var xhr = new XMLHttpRequest();
xhr.open("GET",website.get_URL);
xhr.responseType = "document";
xhr.send();
doc = xhr.responseXML;
// if(xhr.responseXML !== null){
    // doc = xhr.responseXML;
 // } else {
    // // var parser = new DOMParser();
    // // doc = parser.parseFromString(xhr.response, "text/xml");
 // };
console.log(xhr);
console.log(doc);
// Get all the links in the website and put them in an array (from Download extension from Chrome Extensions Samples)
var links = [].slice.apply(doc.getElementsByTagName("a"));
console.log(links);
links = links.map(function(element){
    var href = element.href;
    var hashIndex = href.indexOf('#');
    if (hashIndex >= 0) {
        href = href.substr(0, hashIndex);
    }       
    return href;
}); 

请尝试responseType='html'()@方觉 <代码>xhr.responseType='document'实际上。如果我使用它,我会得到一个正确的XMLHttpRequest对象,响应中有一个document对象(我从控制台日志中看到它),但当我做出“
doc=xhr.response
”时,它返回null。@VíctorDelosSantos
responseType
文档只能与异步XMLHttpRequest一起使用(打开的
xhr.open
的第三个参数必须不存在或
true
)。您能编辑您的问题以显示您当前的代码吗?@RobW您能从所有这些中编译一个答案吗?