Rhino:envjsでpreタグが含まれるページをパースすると途中で切れる のバックアップ(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- Rhino:envjsでpreタグが含まれるページをパースすると途中で切れる へ行く。
- 1 (2013-04-19 (金) 14:30:22)
Java:Rhino:初めてのRhino Rhino:envjsとjQueryをつかう
Rhino:envjsでpreタグが含まれるページをパースすると途中で切れる †
Rhinoでenvjsをつかってpreタグが含まれるページをパースすると、preタグのところで出力が切れてしまいます。
原因は、envjsのバグで、チケットにも登録されていました。
しかし、改修はされていないようです、、、
今回は、Webページ(このWiki)をスクレイピングすることを目的としてるので、以下のコードのとおり、<pre>タグを<p>タグに置換することで、事象を回避しました。
コード †
実行するためには、Rhino+envjs+jQueryの環境で実行する必要があります。
実行するためのJavaのコードはこちらを参照
■sample3.js
function sample(){ url = 'http://www.hiihah.info'; window.location = url; // envjsで取得した<pre>タグが入っているコンテンツをそのまま出力 print('NG出力#############################################################'); print($.(':root').text()); // jQueryのajaxで取得した場合 var res = $.ajax({ url: url, async : false, }); print('NG出力#############################################################'); print($(res.responseText).find('#body').text()); // <pre>タグを<p>タグに置換して出力するとちゃんと出力される。 print('OK出力#############################################################'); result = $(res.responseText.replace(/<pre>/g,'<p>').replace(/<\/pre>/,'</p>')).find('#body').text() print(result); return result; };
具体的には
- window.locationで読み込んだデータは×
- ajaxで読み込んで、そのままjQueryオブジェクトを生成しても×
- ajaxで読み込んで、テキストの状態でpreタグをpタグに置換してjQueryオブジェクトを生成したらOK
まあ、Rhino上でjQueryを実行する際に、domまわりはenvjsを使用しているから、こうなるんだよねw