3

私はクロム拡張機能を開発しているので、許可を求めているドメインの XMLHttpRequests に対するクロスホスト許可を持っています。

XMLHttpRequest を使用して、HTML Web ページ (txt/html) を取得しました。XPath (document.evaluate) を使用して、そこから関連するビットを抽出したいと考えています。残念ながら、返された html の文字列から DOM オブジェクトを作成できません。

var xhr = new XMLHttpRequest();
var name = escape("Sticks N Stones Cap");
xhr.open("GET", "http://items.jellyneo.net/?go=show_items&name="+name+"&name_type=exact", true);
xhr.onreadystatechange = function () {
    if (xhr.readyState == 4) {
    var parser = new DOMParser();
    var xmlDoc = parser.parseFromString(xhr.responseText,"text/xml");
    console.log(xmlDoc);
    }
}

xhr.send();

console.logChromium JS コンソールにデバッグ内容を表示することです。

上記のJSコンソールで。私はこれを得る:

Document
<html>​
<body>​
<parsererror style=​"display:​ block;​ white-space:​ pre;​ border:​ 2px solid #c77;​ padding:​ 0 1em 0 1em;​ margin:​ 1em;​ background-color:​ #fdd;​ color:​ black">​
<h3>​This page contains the following errors:​&lt;/h3>​
<div style=​"font-family:​monospace;​font-size:​12px">​error on line 1 at column 60: Space required after the Public Identifier
​&lt;/div>​
<h3>​Below is a rendering of the page up to the first error.​&lt;/h3>​
</parsererror>​
</body>​
</html>​

では、どのように XMLHttpRequest を使用すると思いますか -> HTML を受信 -> DOM に変換 -> XPath を使用して横断しますか?

DOM オブジェクトの読み込み/受信に「隠された」iframe ハックを使用する必要がありますか?

4

1 に答える 1

3

DOMParser が DOCTYPE 定義を詰まらせています。<link>また、終了のない aなど、xhtml 以外のマークアップでもエラーが発生します/。送信されるドキュメントを制御できますか? そうでない場合は、文字列として解析することをお勧めします。正規表現を使用して、探しているものを見つけます。

編集:非表示の div に挿入することで、ブラウザーに本文の内容を解析させることができます。

var hidden = document.body.appendChild(document.createElement("div"));
hidden.style.display = "none";
hidden.innerHTML = /<body[^>]*>([\s\S]+)<\/body>/i(xhr.responseText)[1];

内部hiddenを検索して、探しているものを見つけます。

var myEl = hidden.querySelector("table.foo > tr > td.bar > span.fu");
var myVal = myEl.innerHTML;
于 2010-10-19T21:53:53.310 に答える