runat

jsをクライアント・サーバのどちらで実行するかを指定するもの。

client

クライアント側で実行する、普通のjs。
runatを省略するとこれになる。


DOM使用可能。

both

クライアント側、サーバ側の両方で使うjs。
クライアント側ではjQueryなどのライブラリが使える。
サーバ側ではwindow直下の関数しか使えない(関数以外の型はundefinedにされる模様)。


DOM使用可能。

server

HTMLファイルが呼ばれた時に実行される箇所。
HTMLのonloadのように*1を指定して上げる必要がある。
ここで定義された変数はグローバル変数として扱う事はできない。


DOM使用可能。


このscriptタグはクライアント側のHTML上では削除された状態になる。

server-proxy

  • runat="client"内で使える関数をここに書く。関数の内部はサーバ側で実行される。
    これによりajaxが簡単に行える。
  • server-proxy内は関数以外のコードを無視する。
    namespace代わりに使うオブジェクトも無視されるので注意。
  • server-proxyはheadタグの一番下に追加される。runat="client"なscriptタグの下に生成される為、server-proxy内の関数が読み込まれる前に呼び出せない事に注意。


参考:JaxerによるサーバーサイドJavaScript (2/4):CodeZine(コードジン)

scriptタグ以外


function geso(){}
geso.runat = "server-proxy"

runat="server"内の関数のrunatを書き換えると、そのrunatとして扱われる。


・runat="server"上の関数に「関数名.proxy = true」と指定するとrunat="server-proxy"と同じ扱いになるらしい(未確認)


参考:Aptana Jaxerのアーキテクチャ:“JavaScriptだけ”を可能にする仕組み - builder by ZDNet Japan




*1:gesoはrunat="server"を指定したscriptの関数名