APIとかdocumentとかURLとか
API.Close(API.GetDocumentID(API.ActiveIndex));
でも動いたのですが、
このAPI定数?みたいなのが書いてあるドキュメントはどこら辺にありますでしょうか?ここらへんのページには、書いてない気がします。
Sleipnir スキン・プラグインスレッド 8th 520
(組み込みスクリプトの場合、sleipnir.APIは使えるとは、書いてあるようです。)
ついでに上記スクリプトではSleipnirScriptとtype宣言してるのに
Developer's Blogで - griffin-stewieの日記
documentがエラーを出さずに使えるのだろう?
この辺混乱あるようなのでわかる範囲で説明。
後者のブログへは一応_windowがグローバル変数からだよ、とだけ超適当なコメントつけたけど、最初グローバルオブジェクトだから、って書くつもりだったのを確証がなかったしドキュメントにはグローバル変数としか書いてなかったらグローバル変数って変えたら、意味通んなくなってた(´・ω・`)。多分スコープチェーン*1が
グローバルオブジェクト→sleipnir→_window→_document
ってなってるからってのが正しい。多分だよ。グローバルオブジェクトの外まで*2スコープチェーンが続いてるのは妙な感じがするけど。
なので、宣言していない変数hogeにアクセスしようとすると、まずグローバルオブジェクト内でhogeプロパティを探し、見つからなかったらsleipnirオブジェクトのhogeプロパティを探し、それでもなければ_windowオブジェクト内に〜という具合に参照される。件のAPIやdocumentは、未宣言の変数なためグローバルオブジェクトのプロパティに存在せず、スコープチェーンを辿ってsleipnir.APIや、_window.documentを参照されているということになる。グローバルオブジェクトがよくわからない場合は以下の二つのコードを実行してみて欲しい。
Echo(URL);//_document.URLが参照される
var URL;//宣言した変数はグローバルオブジェクトのプロパティになる Echo(URL);//グローバルオブジェクトにURLがあるので_document.URLは参照されない
要するに、sleipnir、_window、_documentの各プロパティにはsleipnir等をつけなくてもアクセスできるということなのだけれど、sleipnirオブジェクトのプロパティは大文字小文字を区別しないのでwindow.alertにアクセスするつもりでalertってだけ書くと、優先度の高いsleipnirオブジェクトのsleipnir.Alertへアクセスしてしまう*3。あと、openやcloseは_windowオブジェクトのものが参照されるので_document.openなんかの_documentは省略できない。
*1:http://d.hatena.ne.jp/amachang/20060406/1144339901 の最後のパワポがわかりやすい
*2:書いてて思ったけどSleipnirScriptってグローバルオブジェクトに直接アクセスできない?
*3:statusの場合も同様。ただ、どっちも普通は問題ない