我正在开发一个扩展程序,它需要获取外部网站的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;
});