2

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

我想一种选择是通过读取字符串而不是使用 DOMobject 来查找所有链接……但这要复杂得多。关键是使用来自 chrome 扩展开发网站的 Downloader 扩展示例,它可以完美运行(因为它不是使用来自外部网站的 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;
}); 
4

0 回答 0