SQLの窓

2010年02月28日


JavaScript : prototype.js(1.6.1) の Try.these と XMLHttpRequest


var Try = {
	these: function() {
		var returnValue;

		for (var i = 0, length = arguments.length; i < length; i++) {
			var lambda = arguments[i];
			try {
				returnValue = lambda();
				break;
			} catch (e) { }
		}

		return returnValue;
	}
};

XML の HTTP 通信を行う為のオブジェクトを取得する為のメソッドとしてしか使用していないようなのですが、使い方としては引数に無名関数を並べて、その中でオブジェクトを新規作成するコードを書いて return させています。その結果、最初に存在するオブジェクトを返すという処理になります。

実際は以下のように使われています
var Ajax = {
	getTransport: function() {
		return Try.these(
			function() {return new XMLHttpRequest()},
			function() {return new ActiveXObject('Msxml2.XMLHTTP')},
			function() {return new ActiveXObject('Microsoft.XMLHTTP')}
		) || false;
	},

	activeRequestCount: 0
};

一つ目は、Mozilla 系のブラウザ用で、二つ目が IE 用。三つ目は相当古い Windpos 用でほぼ使われないはずです。ですから、自分で XML の HTTP 通信のオブジェクトを取得したい場合は、IE かそうでないかで普通に取得すればいいと思います


posted by lightbox at 2010-02-28 18:34 | prototype.js | このブログの読者になる | 更新情報をチェックする

2010年02月19日


JavaScript : ブックマークレットに必要な戻り値を戻さない処理の実装方法

一般的な方法として void(0) があり、処理の最後が値を戻さないようにする必要があるので、通常以下のように記述されます。
javascript:処理;void(0);

※ javascript:処理;undefined という記述方法もあります
しかし、void メソッドは引数に処理を引き渡せて、戻り値を戻さないので以下のようにも書けます
javascript:void(処理);

最後の処理が戻り値を返さないメソッドならいいので、void(0) で無く例えば alert("文字列") でもかまいませんが、以下のような書き方もあります
javascript:(function(){処理})();



タグ:javascript
posted by lightbox at 2010-02-19 21:25 | ブックマークレット | このブログの読者になる | 更新情報をチェックする

2010年02月18日


サーバーのログからインジェクションらしきものを選択する正規表現

以下はそれほど厳密ではありません。
%20 がポイントで、これが ? 以降に含まれると怪しいです。

ツールは JGREP2 を使っています。
GET \/\S+\.\S+\?\S+%20


posted by lightbox at 2010-02-18 00:57 | 記録 | このブログの読者になる | 更新情報をチェックする

2010年02月11日


PHP : 良く使うオンラインマニュアルのリンク

基本的な事ばかりですが、初心者的では無く、
開発上基本的なリンクです。

オンラインマニュアルはいざ探すとなると苦労します。
CHM のページで検索で探して、ページを取り出して .html を
.php に変えるとすぐ見つかります。

以下のリンクからダウンロードできる CHM は少し古いですが、
リビルドしているので日本語は化けていません。


タグ:PHP
posted by lightbox at 2010-02-11 20:35 | 記録 | このブログの読者になる | 更新情報をチェックする

JavaScript : HTMLの要素内のイベント記述で複雑な処理を書く方法( 関数を定義したく無い場合 )

良く使う INPUT 要素のボタン内の onClick イベントのサンプルですが、
他の要素でも同じです。onClick='' のシングルクオート内は、改行が
あってもスクリプトなので、(function(){})() という記述で変数もローカル
扱いで処理できます。

但し、'' 内で '' を使う場合は、&#39;&#39; というように書く必要が
あります。また、(function(){})() 内に要素自身を渡したい場合は、
(function(obj){})(this) で、obj で参照できます。
<INPUT type="button" value="IFRAME追加" onClick='
(function(){
	var str="";
	str+="<IFRAME \n";
	str+="	src=\"http://winofsql.jp/\" \n";
	str+="	name=\"myframe\" \n";
	str+="	frameborder=\"no\" \n";
	str+="	scrolling=\"no\" \n";
	str+="	width=\"590\" \n";
	str+="	height=\"800\" \n";
	str+="></IFRAME> ";
	var txt = document.getElementsByName("txt03")[0].value;

	if ( txt != &#39&#39 ) {
		txt = txt + "\n";
	}

	document.getElementsByName("txt03")[0].value = txt + str;
})();
'
>



タグ:javascript
posted by lightbox at 2010-02-11 16:21 | JavaScript オブジェクト | このブログの読者になる | 更新情報をチェックする

JavaScript : 最後にクリックしたテキストフィールドを保存する

onClick では、左クリックのみ対象ですが、右クリックが必要な場合は、
onMousedown を使うといいと思います。変数や関数は window オブジェクト
に lbox20100211 というプロパティを作成して登録しています。保存される
オブジェクトは、lbox20100211.cur にセットされます。
// window オブジェクトにグローバルな名前空間を作成
// ※ lbox20100211
window.lbox20100211 = {};

// クリック時のイベント
// lbox20100211.cur に最後にクリックされたフィールドを保存する
lbox20100211.clickEvent = function(e) {

	var userAgent = window.navigator.userAgent.toLowerCase();

	// クリックされたフィールドを保存
	if (userAgent.indexOf("msie") > -1) {
		window.lbox20100211.cur = window.event.srcElement;
	}
	else {
		window.lbox20100211.cur = e.currentTarget;
	}

}

// ページロード時のイベント
lbox20100211.registClickEvent = function() {

	var userAgent = window.navigator.userAgent.toLowerCase();

	var obj = document.getElementsByTagName("INPUT");
	var len = obj.length;
	var i,str;

	// INPUT 要素を全て取得
	for( i = 0; i < len; i++ ) {

		// type が text のみ取得
		str = obj[i].getAttribute( "type" )
		if ( str == null ) {
			str = "TEXT";
		}
		if ( str.toUpperCase() == "TEXT" ) {
			if (userAgent.indexOf("msie") > -1) {
				obj[i].attachEvent('onclick', lbox20100211.clickEvent);
			}
			else {
				obj[i].addEventListener('click', lbox20100211.clickEvent, false);
			}
		}
	}

}

// ページロードが終了した時に実行する処理を登録
if (window.attachEvent){
	window.attachEvent('onload', lbox20100211.registClickEvent);
}
else {
	window.addEventListener('load', lbox20100211.registClickEvent, false);
}



タグ:javascript
posted by lightbox at 2010-02-11 01:18 | JavaScript DOM | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり