5

背景:
JavaScriptを使用してWebベースのモバイルアプリケーションを開発しています。HTMLレンダリングはSafariベースです。クロスドメインポリシーが無効になっているため、XmlHttpRequestsを使用して他のドメインを呼び出すことができます。アイデアは、外部HTMLを解析し、特定の要素のテキストコンテンツを取得することです。
以前は、テキストを1行ずつ解析して、必要な行を見つけていました。次に、その行のサブストリングであるタグのコンテンツを取得します。これは非常に面倒で、ターゲットのhtmlが変更されるたびに多くのメンテナンスが必要になります。
そこで、htmlテキストをDOMに解析して、cssまたはxpathクエリを実行したいと思います。
それはうまく機能します:

$('<div></div>').append(htmlBody).find('#theElementToFind').text()

唯一の問題は、ブラウザを使用してHTMLテキストをDOM要素にロードすると、すべての外部リソース(画像、jsファイルなど)をロードしようとすることです。深刻な問題はありませんが、避けたいと思います。

ここで質問:
ブラウザが外部リソースをロードせずにHTMLテキストをDOMに解析したり、jsスクリプトを実行したりするにはどうすればよいですか?
私が考えていたいくつかのアイデア:

  • createDocument呼び出し(document.implementation.createDocument())を使用して新しいドキュメントオブジェクトを作成しますが、外部リソースの読み込みをスキップするかどうかはわかりません。
  • JSでサードパーティのDOMパーサーを使用する-私が試した唯一のパーサーは、エラーの処理が非常に悪かった
  • iframeを使用して新しいドキュメントを作成し、相対パスを持つ外部リソースがコンソールでエラーをスローしないようにします
4

2 に答える 2

5

次のコードはうまく機能しているようです。

var doc = document.implementation.createHTMLDocument("");
doc.documentElement.innerHTML = htmlBody;
var text = $(doc).find('#theElementToFind').text();

外部リソースがロードされておらず、スクリプトが評価されていません。

ここで見つけました: https ://stackoverflow.com/a/9251106/95624

オリジン: https ://developer.mozilla.org/en/DOMParser#DOMParser_HTML_extension_for_other_browsers

于 2012-08-15T11:49:54.960 に答える
1

DOM に追加せずに、任意の html 文字列の jQuery オブジェクトを作成できます。

$(htmlBody).find('#theElementToFind').text();
于 2012-08-15T09:34:47.683 に答える