替代XMLHttpRequest()o DOMParser.parseFromString从外部网站制作DOM对象?

时间:2013-08-03 00:42:18

标签: javascript google-chrome-extension xmlhttprequest domparser

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

我想一个选择是通过读取字符串而不是使用DOMobject来查找所有链接......但这样更复杂。关键是使用chrome extensions dev网站中的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;
}); 

0 个答案:

没有答案