Javascript で HTML 文書中の h1 ~ h6 を抜き出して、目次を作成するスクリプトを作成しました。見出し要素に id が振られていなければ自動生成します。自動生成した場合にやたらと "-0" が付くのはご愛嬌…。
とりあえず、Google Chrome 3.0.195.38 と IE 8 で動作確認しました。あんまりきれいじゃないです。
さらに、CSS で目次部分を左側のフレームっぽく表示させるようにしています。なんちゃって擬似フレーム。これも動作確認環境は同じ。
サンプルの HTML / toc.js / toc.css
HTML 側では、toc.js と toc.css を読込むだけです。
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja"> <head> <meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8"/> <meta http-equiv="content-script-type" content="text/javascript"/> <meta http-equiv="content-style-type" content="text/css"/> <link href="toc.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="toc.js"></script> <!-- 省略… --> </head> <body> <h1>1章</h1> <h2>1章-1節</h2> <h3>1章-1節-1項</h3> <!-- 省略… --> </body> </html>
自動生成する内容は、若干カスタマイズできます。toc.js を読込んだより下の行で以下のように書けば。
<script type="text/javascript">//<![CDATA[ toc.listtag = "ol"; // 番号つきリストに toc.tocId = "tableOfContents"; // 目次部分の id を別の値に toc.defaultIdPrefix = "section"; // 見出し要素の自動生成 id のプリフィックス //]]> </script>
RFC 2616 の 6.1.1 Status Code and Reason Phrase がオリジナルということになるのかしら ?
Status-Code =
"100" ; Section 10.1.1: Continue
| "101" ; Section 10.1.2: Switching Protocols
| "200" ; Section 10.2.1: OK
| "201" ; Section 10.2.2: Created
| "202" ; Section 10.2.3: Accepted
| "203" ; Section 10.2.4: Non-Authoritative Information
| "204" ; Section 10.2.5: No Content
| "205" ; Section 10.2.6: Reset Content
| "206" ; Section 10.2.7: Partial Content
| "300" ; Section 10.3.1: Multiple Choices
| "301" ; Section 10.3.2: Moved Permanently
| "302" ; Section 10.3.3: Found
| "303" ; Section 10.3.4: See Other
| "304" ; Section 10.3.5: Not Modified
| "305" ; Section 10.3.6: Use Proxy
| "307" ; Section 10.3.8: Temporary Redirect
| "400" ; Section 10.4.1: Bad Request
| "401" ; Section 10.4.2: Unauthorized
| "402" ; Section 10.4.3: Payment Required
| "403" ; Section 10.4.4: Forbidden
| "404" ; Section 10.4.5: Not Found
| "405" ; Section 10.4.6: Method Not Allowed
| "406" ; Section 10.4.7: Not Acceptable
| "407" ; Section 10.4.8: Proxy Authentication Required
| "408" ; Section 10.4.9: Request Time-out
| "409" ; Section 10.4.10: Conflict
| "410" ; Section 10.4.11: Gone
| "411" ; Section 10.4.12: Length Required
| "412" ; Section 10.4.13: Precondition Failed
| "413" ; Section 10.4.14: Request Entity Too Large
| "414" ; Section 10.4.15: Request-URI Too Large
| "415" ; Section 10.4.16: Unsupported Media Type
| "416" ; Section 10.4.17: Requested range not satisfiable
| "417" ; Section 10.4.18: Expectation Failed
| "500" ; Section 10.5.1: Internal Server Error
| "501" ; Section 10.5.2: Not Implemented
| "502" ; Section 10.5.3: Bad Gateway
| "503" ; Section 10.5.4: Service Unavailable
| "504" ; Section 10.5.5: Gateway Time-out
| "505" ; Section 10.5.6: HTTP Version not supported
| extension-code
extension-code = 3DIGIT
Reason-Phrase = *<TEXT, excluding CR, LF>
Web 上の IT用語辞典 、みたいな物ってよく使うのですが、Microsoft単語帳 が、ちっちゃいウインドウで開くコンパクト版があって、ひそかにお気に入りだったりします。ただし、コンパクト版の、ブックマークに登録するリンクは用意されていないんですよね。単語帳のホームページには「単語帳 コンパクト版の起動」というリンクがあるのですが、ページの JScript関数 を呼び出すようになっているのみです。そこで、ブックマーク登録用に、JavaScript URLにしてみました。
javascript:window.open( %22http://www.microsoft.com/japan/Terminology/query.asp?ui=S%22, %22compact%22, %22width=300,height=360,titlebar=no,scrollbars=no,menubar=no,toolbar=no,location=no,status=no,resizable=no%22 ).focus();
右クリックして、お気に入りorブックマークに追加することができます。
Firefoxもそうだけど、IEはリンクをShift + クリックすると、リンク先を新しいウインドウで開くことができる。
実はこれはHTMLヘルプでも可能なことを発見。ただしIEで開く。
DBの検索条件を指定して、検索結果を表示する、こんなフレームページを作成しました
<!-- フレームドキュメントのフレーム定義部分 --> <frameset rows="*,60"> <!-- 検索結果を表示するフレーム --> <frame id="frame_main" name="frame_main" frameborder="0" /> <!-- 検索条件のフォーム --> <frame id="frame_menu" name="frame_form" frameborder="0" src="form.asp" /> <noframes> (省略) </noframes> </frameset> <!-- 実際にはこんな感じ ┏━━━━━━━┓ ┃frame_main ┃ ┃ ┃ ┃ ┃ ┠───────┨ ┃frame_form ┃ ┗━━━━━━━┛ -->
ページの初期表示に検索結果を表示するため、form.aspのbody.onloadにフォームをサブミットするコードを書いておいたのですが、httpsでアクセスすると、表示時に、'このページにはセキュリティ保護された項目と保護されていない項目が含まれています。 保護されていない項目を表示しますか?'が表示されてしまいます。frame_mainに表示するものがないため、UAが'about:blank'を表示しようとして起こるみたいです。ダミーのドキュメントを作成して、frameタグのsrcに指定しておくと解決します。
複数ページの<body onload="....">に同じクライアントスクリプトの初期化処理を記述するのはメンテナンスが大変、というあなたに朗報です!
...というほどのものではないのですが、まあ、こんな感じで、このスクリプトを読み込むすべてのページで、同じ初期化処理を行うことができます。
// init.js window.onload = function () { // 初期化処理を記述します... return true; }
そして、それぞれのページのhead要素内に
<script type="text/javascript" src="./init.js"></script>
と記述します。
ここでは関数を代入していますが、
// init.js
window.onload = 'init(this);'
などと、スクリプトを文字列で指定しても動きそうな気もします。(確認していません)
また、もちろんonload以外でも、たとえば
window.onblur = function () {
window.focus();
}
なども動きます。
一定秒後に指定したページにジャンプさせるためのメタタグはこのように書く。
<meta http-equiv="Refresh" content="0; url=http://frog.raindrop.jp" />同じように、HTTPヘッダでREFRESHを吐き出すと、同じ動作をさせることができる。
<%ただし、若干UAによって動作が違うらしい。
Call Response.AddHeader("REFRESH", "0; url=http://frog.raindrop.jp")
%>
お決まりのヘッダです。わたしは、これをたとえば"nocache.asp"などとして保存しておき、
Call Server.Execute("./nocache.asp")
などとしています。
<%@ Language=VBScript %><% '@@ キャッシュを無効にする With Response Call .AddHeader("Pragma", "no-cache") Call .AddHeader("Cache-control", "no-cache") .Expires = 0 .CacheControl = "Private" End With %>
VBでASPからコールするActiveX DLLやActiveX EXEを作成する場合のポイントらしきものです。
ASPで使用するスクリプト言語は型がありません。したがって
以下の2つに参照設定を行って、ASPからと同じように、Response.Writeでクライアントへの出力を行ったり、Request.ServerVariablesで環境変数を取得したりすることができます。
ASP組み込みオブジェクトにアクセスするには、GetObjectContextメソッドを使います。Responseオブジェクトを例に取ると
Dim aspResponse As ASPTypeLibrary.Response
Set aspResponse = GetObjectContext("Response")
Call aspResponse.Write("Hello ASP!")
と言うような感じです。このとき、クラスのMTSTransactionModeプロパティが、"NotAnMTSObject"ではうまくいきませんでした。"Uses Transaction"にするとうまくいきましたが、どういう値であるべきかまでは調べていません。
また、この処理を、Class_Initiarizeプロシージャに記述したオブジェクトを、Global.asa内で生成したり、アプリケーションスコープのobjectタグで宣言すると、うまく動作しないようです。
(04/01/24 追記)
Applicationスコープにするには、スレッドモデルがBothまたはNeutralのコンポーネントを作成する必要があります。つまり、VBで作成することはできません。
「006~ASP 0231~Server.Execute エラー~無効な形式の URL または完全認証されている絶対 URL が使用されました。相対 URL を使用してください。」に悩まされること半日、Server.Executeメソッドで、パスパラメータにクエリ文字列が使えるってのはウソ!ってな情報 [Microsoft Windows 2000 Serverドキュメント]を得ました。
正確にはこうらしいです
Server.Execute を呼び出す .asp ファイルで利用できる QueryString は実行 .asp ファイルで利用できるので、Server.Execute のパス パラメータに含まれる QueryString を渡す必要はありません。ただし、Path パラメータに含まれる別のクエリー文字列を渡すことはできません。
たとえば、ASPやCGIからCSVを動的に生成して出力するような場合です。
ためしにこんなコードを書いてみました。
<%
' sample.asp
Response.ContentType = "application/x-csv"
For i = 0 to 10
For j = 0 to 10
%><%=i*j%>,<%
Next
%>日本語フィールド<%=vbNewLine%><%
Next
%>
このaspスクリプトへのリンクを別のhtmlに貼っておき、クリックするとCSVがダウンロードされる、用にしたかったのですが、これではダウンロードされるファイル名がsample.aspになってしまいます。中身はカンマ区切りのテキストなのですが。
ここで関係してくるのがRFC2183[HTMLコーディングチェック]に定義されているContent-Dispositionヘッダです。
OpenSSLを使って、httpsを使用するために必要になる証明書を作成する方法です。
パラメータは結構適当です。大まかな手順のみです。以下のものを作成します。
参考にしたサイト:IIS+OpenSSLでhttpsを[Yonetani A.'s Home Page !]
IEで、以下のような組み合わせで表示を行いました。
スタイルシート
#div_frame {
margin-right: 10px;
border: 2px groove #ccc;
padding: 5px 10px;
}
#button_submit {
position: absolute;
right: 10px;
bottom: 10px;
}<body>
<form action="hoge.cgi">
<div id="div_frame">
<label for="text_name">お名前<input id="text_name" type="text" /></label>
<label for="text_mail">e-mail<input id="text_mail" type="text" /></label>
</div>
<button id="button_submit">送信</button>
</form>
</body>
http://www.02.246.ne.jp/~torutk/cxx/openssl/install.html
http://october.servehttp.com/openssl_win_inst.htm
http://mars.elcom.nitech.ac.jp/security/openssl/ca.html
http://www.shininglightpro.com
http://www.ipa.go.jp/security/fy14/contents/soho/html/chap4/httpd/IIS-SSL.html
http://www.microsoft.com/japan/msdn/security/iis-ssl/iis-ssl.asp
http://www.bitlink.co.jp/server/win_iisxp.htm
http://www.microsoft.com/windows2000/ja/server/iis/default.asp?url=/windows2000/ja/server/iis/htm/core/iiocrsc.htm
OpenSSL
http://www.openssl.org
Tabular Data Control (TDC)のFilterプロパティには少々癖がある。
たとえば、列名、比較値とも、引用符は使用しない。
つまりこれは正しい。
sFilter = ' column1 = 大根 ';
oTdc.Filter = sFilter;
sFilter = ' column1 = "" ';
oTdc.Filter = sFilter;
<!-- Microsoft Tabular Data Controlオブジェクト -->
<object id="object_rec_vegetables" classid="clsid:333C7BC4-460F-11D0-BC04-0080C7055A83">
<param name="DataURL" value="./vegetables.csv" />
<param name="UseHeader" value="true" />
<param name="Sort" value="-harvest_date" />
<param name="Filter" value="vegetable_name <> """ />
</object>
論理演算子についてもちょっと変わってる。
URLが、
hoge.html?param1=0001¶m2=0002
のばあい、'?'以降を、ブラウザオブジェクトでは、window.location.searchとして取得することができる。
※ 正確にはsearchの部分はURLに含まないらしい。
これを分割して、連想配列のように取得するクラスを作ってみた。
var oSearch = new CLocationSearch(location.search);
document.write(oSearch.item('param1');
のように使うことができる。
2003/10/08現在の、MSDNライブラリの該当するドキュメント
おなじく英語版ドキュメント(情報多い)
これらはブラウザに依存しないサイト構築には向かないが、デモ画面には最適である。
後でASP等で実際に実装する際にもソースが流用しやすい。