外部 Web サイトの HTML を取得し、すべてのダウンロード可能なリンクを検索する必要がある拡張機能を開発しています。私が書いたコードは機能します...しかし、解析プロセス中に多くのWebサイトがある時点でパーサーにparseErrorをスローさせるため、たまにしかありません。すべての拡張機能が完全に機能する Web (問題なく解析できるように十分に設計されている) がいくつかあります。他の一部の Web サイトでは、parseerror によって getElementsByTagName が役に立たなくなります。
DOMobject を使用する代わりに、文字列を読み取ってすべてのリンクを見つけることが 1 つのオプションだと思いますが、それははるかに複雑です。ポイントは、Chrome 拡張機能開発 Web サイトの Downloader 拡張サンプルを使用すると、完全に機能することです (外部 Web サイトの DOMobject を使用する代わりに、現在アクティブなタブから DOMobject を作成するため)。
一時的に Web サイトで新しいタブを開き、そのタブから 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;
});