2016-03-31 8 views
2

WebワーカーのHTML文字列からデータを抽出します。ウェブワーカーの中のCSSの選択?

私はそれを明確にしたいDOMを操作したくありません。私は、HTMLからデータを抽出し、抽出されたデータを返す必要があるWebワーカーにHTML文字列を送信しています。私は何ができるブラウザで

var html = $("<body><div>...more html...</div></body>"); 

    var extractedText = $(".selector", html).text(); 

私の質問:同じHTML文字列を指定した場合

は、Webワーカーの環境で上記のコードと同等とは何ですか? Webワーカーなどでは、jQuery、DOMParser、no querySelectorはありません。代替手段はありますか?

理由:

私は、ブラウザでページのフライスクレイピングにやってるし、それはかなり重い仕事だからUIスレッドをブロックする必要はありません。

私はjsdom、cheerioなどを見てきましたが、それらを動作させる方法を理解できませんでした。提案重複について

私が提案し、重複の両方を検討していると、彼らはこの質問への回答を検索しているときに私が前に読んだものです。彼らは、HTMLの解析ではなく、XMLの解析に取り組んでいます。また、WebワーカーのCSS選択の使い方については触れていません。

+0

[WebワーカーでXMLを解析する](http://stackoverflow.com/questions/10494632/parsing-xml-in-a-web-worker)と[WebワーカーでXMLを解析する](http ://stackoverflow.com/questions/9133918/parsing-xml-in-web-workers) – Kaiido

+0

@Kaiido私は両方をチェックしましたが、この問題は解決しません。 – yehyaawad

+0

@dandavis querySelectorとjQueryのAJAXは、悲しいことにWeb Worker環境には存在しません。 – yehyaawad

答えて

0

短い答え:

は、Webワーカーで、クエリを含むHTML/CSS操作の任意の並べ替えを、行うことはできません。

長い答え:

多くのDOMがあります。ページにレンダリングされるメインDOMがありますが、querySelectorや友人を含むブラウザがHTMLやXMLツリーに触れるものはすべて、そのツリーのDOMを構築する必要があります。 (参照:DocumentFragment)Mozillaの開発者の

一つを、彼らはワーカースレッド(nabbleに、this question経由で見つかった)上の任意のDOMを構築することはできませんいくつかの理由について少し話しました:

あなたが想定していますDOM実装コードのなかでも、DOMオブジェクト以外のオブジェクトが使用されていないこと、またはそれらのオブジェクトが完全にスレッドセーフであることを確認することはできません。少なくともGeckoではそうではありません。

この場合の問題は、複数のスレッドで同じDOMオブジェクトに触れることではありません。問題は、異なるスレッド上の2つのDOMオブジェクトが、グローバルな第3のオブジェクトに触れることです。

たとえば、XMLパーサーは、Geckoでメインスレッド(DTDの読み込み、オフハンド;私が以前見たことのあるものがいくつかありますが、それを公開していないもの) 。

So.明らかに、querySelector、createElement、またはワーカーにとって有益なものは使用できません。どうすればいいですか?

もちろん、独自のDOMパーサ/セレクタモジュールを構築してください!

あなたの労働者にhtmlparser2のコピーを入れてみてください。おそらくbrowserify(その仕事は独自の質問です)を経由してください。それで、querySelectorのような選択を可能にするCSSselectで、あなたは行く準備ができています。

確かにjQueryをそれらと一緒に使用することはできませんが、単純なクエリの必要性(およびquerySelector/querySelectorAll)で十分です。