- ベストアンサー
javascriptでブラウザに表示されている文字列を取得したい
javascriptでブラウザに表示されている文字列を取得したい 宜しくお願いします。 javascriptを使って、現在表示されているブラウザの文字列を取得する方法はありますか? ソースから取得したり、出来そうな気がするのですが、検索しても方法が見つかりませんでした。 もしくは、ブラウザのセキュリティで出来ないのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
続き(body部以下) <body> <h2>Iframe Contents Text Get</h2> <p> <span style="font-weight:bold;">URL:</span><input type="text" id="url" style="width:70%" value="/index.htm"> <button onclick="frame_load();">ロード</button> </p> <hr> <iframe id="target_frame" name="target_frame" src="/index.htm" width="640px" height="800px" style="float:left;"></iframe> <button onclick="get_text();">テキスト抽出</button> <button onclick="result_clear();">クリア</button> <p style="text-align:center;"> <textarea id="result" cols="15" rows="30"></textarea> </p> </body> </html> ※レイアウトが気にいらなきゃ適時修正してね ※外部サイトのHTMLの解析は、サーバープログラムが無いとだめよ。
その他の回答 (2)
- yyr446
- ベストアンサー率65% (870/1330)
IFRAMEにロードしたHTMLのテキストノードを抽出して、TEXTAREAに 書き出すサンプルです。これだけでは、あまり使い道が無いような... ※display:none;とかvisibility:hidden;のテキストも拾っているので、 もう一工夫かな。 サンプル(全角空白は半角空白になおして使いましょう) <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>Iframe Contents Text Get</title> <script type="text/javascript"> <!-- function TextSearch(node){ this.node=node; this.result=[]; this.texts=[]; (function(node,result){ for(var elm=node;elm;elm=elm.nextSibling){ if(elm.nodeType == 3){ result.push(elm.parentNode); }else{ if(elm.hasChildNodes()) arguments.callee(elm.firstChild,result); } } })(this.node,this.result); this.text=function(){ this.texts.length=0; for(var i=0;i<this.result.length;i++){ if(this.result[i].nodeName!="SCRIPT"){ var textelm=this.result[i].firstChild; while(textelm.nodeValue==null){textelm=textelm.nextSibling;} this.texts.push(textelm); } } } this.finded_elm=this.result; this.text_elm=this.texts; } function get_text(){ var iframe=document.getElementById("target_frame"); var content=iframe.contentDocument.body; var result_str=""; document.getElementById("result").value=""; var text_search=new TextSearch(content); var target_length=text_search.finded_elm.length; if(target_length>0){ text_search.text(); var elm=(text_search.text_elm.length==0)?text_search.finded_elm:text_search.text_elm; for(var i=0;i<elm.length;i++){ result_str += elm[i].nodeValue.replace(/^[\s, ]+/gm,""); } document.getElementById("result").value = result_str; } } function frame_load(){ var url=document.getElementById("url").value; target_frame.location.href=url; } function result_clear(){ document.getElementById("result").value=''; } // --> </script> </head> body部へ続く
- yyr446
- ベストアンサー率65% (870/1330)
「現在表示されているブラウザの文字列」 の意味ですが、それは画像とかに乗っている文字は除いて、改行とか回り込みとか のレイアウトも無視して、スタイル属性とかで、表示を抑止している部分は除いて、 とにかくテキストノードの文字列を表示するという事でしょうか?
補足
ありがとうございます。 その通りです。タグもスタイルシートも必要なく、ただ、画面に表示されている文字列を取得できればと考えております。