- ベストアンサー
行番号を指定したリンク
テキストファイルへのリンクで行番号を指定する事が出来るでしょうか? 新しいウインドウを開いて, 例えばreadme.txtの123行目に飛びたいです。 <A target="_blank" href="readme.txtの123行目">読んでね</A> HTMLだけで出来ないのであれば、JavaScriptを使ってもかまいません。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
<html> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis"> <head> <TITLE>ヘ(・、ヘ)ホイホイ(ノ、・)ノホイホイ</TITLE> <SCRIPT LANGUAGE=javascript> var nw; function s(a){ txt.value = a; if(nw){ if(nw.closed){nw_open();} else { jump();return;} } else { nw_open(); } nw.attachEvent("onload",jump); } function nw_open(){ nw=window.open("read.htm",null,"height=500,width=500,scrollbars=yes,menubar=no,location=no,toolbar=no"); } function jump(){ nw.location.hash=inp.value; nw.focus(); } function window_onunload() { try{nw.close();} catch(er){} } //--> </SCRIPT> </head> <body LANGUAGE=javascript onunload="return window_onunload()"> <p>InternetExplorer5以上で<BR>このページがあるホームページスペース内(下層ディレクトリも可)限定です<BR>(同じサーバー内でも出来るかも)</p> <P><INPUT id=inp size=3 value=50>行目</P> <A id=oD href="javascript:oD.startDownload('readme.txt',s);" style="BEHAVIOR: url(#default#download)"> サイト内のファイル</A>(readme.txt)</P> <P><TEXTAREA id=txt style="display:none"></TEXTAREA> </P> </body> </html> ------read.htm------ <HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis"> <TITLE>__φ(゜ー゜*)フムフム___φ(。_。*)カキカキ</TITLE> <SCRIPT LANGUAGE=javascript> <!-- var s1 = window.opener.txt.value; var sa = new Array(); sa = s1.split("\n"); document.write("<PRE>"); for(i=1;i<=sa.length;i++){ document.write("<A name=" + i + "></A>"); document.write( sa[i] + "<BR>" ); } document.write("</PRE>"); //--> </SCRIPT> </HEAD> <BODY> </BODY> </HTML>
その他の回答 (3)
- ittochan
- ベストアンサー率64% (2667/4137)
下の例では <A name タグを全行に挿入しましたが、 これは、サブウィンドウを閉じずにいろんなところを 指定できるように作りました。 別行を見る時にサブウィンドウを開きなおすのなら 親ウィンドウから指定行を取得して 一つだけ<A name タグを挿入したほうが 表示スピードが上がるかも。 別解1 ビヘイビアを使用しない方法として IFRAMEタグ + createTextRange()メソッドを使っても変数に取り込めます。 IE5以上限定ですが。
- ittochan
- ベストアンサー率64% (2667/4137)
そのリンク先のテキストファイルは リンク元のページと 同じディレクトリか、 同じサイト内にあるの? 上記の条件 + InternetExplorer5以上(NNは持っていないので) なら出来ると思うけど。
補足
はい。 <A target="_blank" href="readme.txt"> のリンク先を123行目に飛びたいのです。 IE5以上限定でかまいませんので、よろしくお願いします。
- nipotan
- ベストアンサー率59% (134/227)
テキストへは不可能です。 また、JavaScript でも、リンク (リクエスト) が完了した時点で、フォーカスや制御がそのテキストファイルに移ってしまうのでスクロールすることも不可能です。 リンク先が HTML 等である場合は <a name="123"></a> で <a href="hogehoge.html#123">123行目</a>のようにしてやる事が可能ですが、そもそもテキストファイルはブラウザで開くものではない (開けるのはオマケみたいなもん) ので、ブラウザによってはダウンロードダイアログが表示されます。 なので、テキストファイル相手に行番号指定ってのは、諦めてください。
補足
回答ありがとうございます。 JavaScriptでリンク先を開いた後にスクロールは出来ました。 スクロールする量は行数×係数で計算していますが、この係数を求める方法は ないでしょうか? 私の環境で最適値は IE5.0で17.95 , NN4.78で22.9位です。 <script language="JavaScript"> //URLと行番号を指定してウインドウを開く function pop(url, y) { var w = window.open(url,"Newwindow" ,"top=100,left=100,width=300,height=300,resizable=yes,scrollbars=yes,dependent=yes" ); w.scrollTo(0, y * 17.95); //係数は環境により異なる w.focus(); return(false); } </script> <A href="readme.txt" onclick="return pop('readme.txt', 123)">読んでね</A>
お礼
回答ありがとうございます。 startDownloadで読み込んで、document.writeで書く方法は理解できました。 jumpの部分はうーん難しい。。。 実戦では、readme.txtの必要な部分を切り取って表示することにしました。 <SCRIPT LANGUAGE=javascript> function onDownloadDone(s) { var y1 = inp2.value; var y2 = inp3.value; var w = window.open("","Newwindow" ,"top=100,left=100,width=300,height=300,resizable=yes,scrollbars=yes,dependent=yes" ); w.document.open(); var sa = new Array(); sa = s.split("\n"); w.document.writeln("<PRE>"); for(i = y1 - 1; i < sa.length && i <= y2 - 1; i++){ w.document.write( sa[i] + "<br>"); } w.document.writeln("</PRE>"); w.document.close(); w.focus(); return(false); } </script> <INPUT id=inp1 size=13 value="readme.txt">の <INPUT id=inp2 size=3 value=50>行目から <INPUT id=inp3 size=3 value=60>行目までを <A id=oD href="javascript:oD.startDownload(inp1.value, onDownloadDone);" style="BEHAVIOR: url(#default#download)">参照</A>