JavaScript

JavaScript Templates調べ

アブストラクト JavaScript Templates(以下JST)はTrimPathプロジェクトにおけるテンプレート処理(MVCのV)を担うライブラリです。基本SyntaxはFreeMarker, Velocity, Smartyなどに似ており、ライセンスは、APL(Apacheライセンス)とGPL(GPL2)のデュアルライセ…

Object#hasOwnProperty() break? continue?

Objectの要素を列挙するときfor(i in Object);ループをつかったりするのですが、prototype.js*1などによるObject汚染(いい言葉ではないな)がありその回避手段としてObject#hasOwnPropertyを使ったりしますが今回は、そのループ内でhasOwnPropertyをつかった…

IEでHTMLElement.prototypeの代替手段

FireFoxなどにあるHTMLElementのprototypeに共有の便利メソッドを突っ込みたいという欲求があるんですがIEでは実装されていないのでうまくいきません。googleっても出てこねぇよ!ということで仕様読む。MSDN見ていたらどうやらIEではDOMイベントなどの定義…

エレメントの位置固定

よくJavaScriptでスクロールしても同じ位置にエレメントを固定させているテクがあり実装されているところも少なくない。でも僕はあんまり好きではない。というのもスクロールさせたさいに”チラツク”から嫌いです。ちらつかなければな…と思いこんなコードを実…

DOMに便利メソッドを突っ込む

IE用のgetComputedStyle互換コード書直し if(!this.getComputedStyle) { getComputedStyle = function(element) { element.getPropertyValue = getComputedStyle.getPropertyValue; return element; }; getComputedStyle.getPropertyValue = function(prop) …

TrimQueryの調べ

アブストラクト TrimQueryはTrimPathプロジェクトにおけるJSONデータをSQL構文で操作可能にするライブラリである。基本SQL SyntaxはSELECT ... FROM、WHERE clauses、GROUP BY、HAVINGなど基本的なものからself joins、LIMITなど利用可能。ライセンスはGNU P…

DOMのエレメントのスタイル属性を取得するコード

昔DIV要素のwidthやheightをスタイルシートで定義してそのdocument.getElementById('foo').style.widthとか取得できなくて(当然ですが…)悩んでいました。別件で同じようなことする必要でてきて書き直しましたのでポスト。 DOMのエレメントのスタイル属性を取…

TrimPathの調べ

なかなか検索しても出てこないからTrimPathについてしばらく調査します。とりあえずTrimPathプレジェクトのプロダクトは以下の通り。 TrimPathのプロダクト JavaScript Templates (JST) JavaScript Templates(以下JST)はTrimPathプロジェクトにおけるテンプ…

GeckoActiveXObject

Firefoxでjavascript:alert(typeof(GeckoActiveXObject));でfunctionが返ってくる。この子いったい何者(?-?) wmp = new GeckoActiveXObject("WMPlayer.OCX.7"); // 問題無 fso = new GeckoActiveXObject("Scripting.FileSystemObject"); // 駄目。怒られる a…

Packages, java, sun, netscapeここら辺のお話

JavaScriptではJavaとの連携がすぐできるように実装されている。それを実現するのがPackages, java, sun, netscapeであり仕様はhttp://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Packagesこの辺に記載ある。簡単なサンプ…

JavaScriptとPHPを連携させて遊んでみる

内容としてはhttp://d.hatena.ne.jp/shogo4405/20060825/1156489703の続編です。コマンド叩ける関数あれば他の言語でもいけるかと思います。 先に結果から PATH_INFO使っているのでApacheの設定次第ではこんな感じで直接.jsが動いてるかのように見えます。そ…

文字列出力のラッパー

ブラウザ側とシェル(SpiderMonkeyやJScript.NET)での文字列出力の実装が違うので(まあ当然だけど。)SSとCSで互換の文字列出力のクロス関数書いてみた。 その1 global = this; Print = function() { if(global.document) return document.write; return print…

FileI/OとかCharsetとかその辺の話をテキトーに

JSmartyではコンパイラクラスで毎回毎回動的にテンプレート関数を作っているのでJemplateのようにあらかじめコンパイルしたものを読込む方式にもできたほうがいいのではないかと思う。IISやAJAJAでサーバーサイドでコンパイルしたテンプレートをクライアント…

IEの落し方

id:starocker:20060901:p1で紹介されている”たった1行のJavaScriptコードでInternet Explorerをクラッシュさせる方法”で昔同じようにクラッシュしたがことがあったのでそのときのコードのいくつかのサンプル。 紹介されているコード もっと短くなりますね。…

気づかなかったコード

気づかなかったStringの関数として利用方法 str = String('str'); ary = Array('p1','p1'); obj = Object(); alert(typeof(str)); // string alert(typeof(ary)); // object alert(typeof(obj)); // object alert(ary[0]); // p1 alert(ary[1]); // p2なんの…

HTAによる掲示板システムのサンプル

これは何? 社内LAN引いてるけどサーバー立てちゃ駄目とかシステム管理人に言われてる人の為の掲示板プログラムのサンプルです。Windows2000でないと動かない気もしないでもない…(--; というわけでJavaScriptとJScriptで頑張れば掲示板作れます。サーバーが…

PHPでサーバーサイドJavaScriptを実現する。

はじめに Rhino(MozillaによるJavaによるJavaScriptの実装)を利用してPHPでサーバーサイドJavaScriptを実現しようという試みです。適当にいじっていたら動いたので共有の為にメモっておきます。 キーテクノロジー PHPによるJavaブリッジ Javaブリッジを活用…

JavaScriptのJava化

Rhino(Mozilla組によるJavaによるJavaScriptの実装)よりJavaScriptのJavaコンパイル(JavaScriptのJava化)ができるらしいということで試したのでメモ。 Java化の手順 Rhinoの入手(http://www.mozilla-japan.org/rhino/download.html) とりあえず解凍。色々と…

クラス継承もどき

JavaScriptで継承すると Class.prototype = new SuperClass; とした後に Class.prototype = {}; とした途端何もかも駄目になってしまう件(当たり前)プロトタイプチェーンを維持しながらどうにかしようと試行錯誤したところ無理という結論に達したもののその…

JavaScriptでSAXを実現する。

JavaScriptはDOMが標準搭載になっているけれども標準のDOMはあえて使わずにSAX(Simple API for XML)ってみる。String.replaceの仕様を利用してみるといとも簡単にSAXが実現できてしまえると思うのは僕だけだろうか? サンプル*1 /** * コンストラクター プチ…

String.prototype.replace

こんな利用の仕方もできるのでは?と思いつつ半信半疑だったので、実際に挑戦して出来たのでメモ。String.prototype.replace賢いね。 replaceイロイロ スタンダードなreplace var str = "foo foo"; str = str.replace("foo","bar"); // bar foo が表示される…

with句イロイロ

その1 with(document){ write("こんにちは"); // こんにちはの表示 } その2 o = {}; o.p = "こんにちは"; with(o){ var func = function(){ alert(p) }; } func(); // こんにちはの表示 その3 var Foo = {}; Foo.Foo = function(){ }; Foo.Foo.prototype = {…

AJAJAってみたい。

ものすごくAJAJAで遊んでみたい気がしたものの…Windowsからやろうと思ったら色々とコンパイルしないと駄目みたいだ。Visual Studio 2005でコンパイルできますか(?-?) Windowsで頑張るよりもLinuxインストールしたほうがいい気がする(昔はLinuxも使っていた。…

僕の知るJavaScriptの歴史*回顧その1

よく過去を振返ってみると僕が始めて覚えたプログラミング言語はJavaScriptだったよねと思いつつJavaScriptに触れてみてもう彼是10年?いや〜IE3とかNN3とかの時代ですよ当時DOMってなんですか?NNではJavaScriptはまともに動きません。というか僕が書き方悪…

prototype

function Foo(){}; Foo.prototype.msg = function(){ alert('Foo1'); }; var foo1 = new Foo(); var foo2 = new Foo(); // Fooが表示された。 foo1.msg(); foo2.msg = function(){ alert('Foo2'); }; Foo.prototype.msg = function(){ alert('Hoge'); }; // …

XMLHttpRequestを利用した外部js動的ロード関数

げげげ。明日(8月1日)テスト!。こんなことしてる場合じゃないじゃん。まあいいやせっかく書いたし。 function load(script) { var loaded = load.loaded; if(loaded[script]) return; var http = load.xmlhttp; var name = script.split('.')[0]; http.open…

DOMを利用した外部js動的ロード関数

別ドメインのファイルも読み込めるから便利かもなと。(注)load.loaded=[]をload.loaded={}に変更 function load(script) { var loaded = load.loaded; if(loaded[script]) return; var elm = document.createElement('script'); elm.type = 'text/javascript…

動作速度検証

※検証はMSIE6.0です。 その1-1 function foo(){ for(i=0;i<100000;i++) { ','; ','; ','; ','; ','; ','; ','; ','; ','; ','; ','; ','; ','; ','; ','; } }その1-2 function foo(){ var q = ','; for(i=0;i<100000;i++) { q; q; q; q; q; q; q; q; q; q; q…

継承とprototypeのテスト

当然ながらこんなスクリプトもOK。 function Foo(){}; Foo.prototype.foo = "foo"; Foo.prototype.func = function() { var bar = new Bar; alert(bar.foo); }; function Bar(){}; Bar.prototype = new Foo; foo = new Foo; // fooがalert表示されます。 foo…

location.hashのハック

AJAXなシステムではブックマークができない戻れないということが問題になっているけどlocation.hashを利用してそれを解決しようという試み。foo.html#mode=display&id=00001とかいう感じでやる。hash値は?以外はQUERYSTRINGSみたいな形で解析できるからいい…