Kumuでの依存解決方法 案1
http://d.hatena.ne.jp/yuki_neko_nyan/20060508/1147074808
に書かれているけどUserScript自身が依存を解決してくれればいい。
そうするとわざわざ使う方は余計になーんて事書かなくていいわけだし。
であれば単純にチェーンすればよいのでは?って話。
user.jsはdependに依存してますよと。
depend.js
depend = {}; depend.add = function(x,y){ return x+y; };
user.js
Kumu.Loader.importLib('depend'); usr = {}; usr.add = depend.add;
そそこーやってuser.js内でdeped.jsをロードしちゃえばいいのよ。
html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>KumuImportTest</title> <link rel="stylesheet" type="text/css" href="../css/jsUnitStyle.css"> <script language="JavaScript" type="text/javascript" src="../app/jsUnitCore.js"></script> <script language="JavaScript" type="text/javascript" src="../js/kumu.js"></script> <script language="JavaScript" type="text/javascript" src="../js/src/import.js"></script> <script language="JavaScript" type="text/javascript"> Kumu.Loader.importLib('user'); </script> </head> <body> <input type="button" name="test" value="計算" onclick="alert(usr.add(1,2));"> </body> </html>
depend.add→usr.add→htmlでコールが連鎖している。
また
<script language="JavaScript" type="text/javascript" src="../js/src/depend.js"></script> <script language="JavaScript" type="text/javascript" src="../js/src/user.js"></script>
なんて一切書いてない。
使用する側はdepend.jsを気にせずusr.addを呼べてます。
うーん、JSANと何がちゃうのかわからん…。
import.js
if (typeof(Kumu.Loader) == 'undefined') { Kumu.Loader = {}; }; Kumu.Loader = Kumu.extend(Kumu.Loader, { repository:['/teeda-example/js/'], addRepository : function(o){ repository.push(o); }, importLib : function(lib){ var axo = new Array( "Microsoft.XMLHTTP", "Msxml2.XMLHTTP.4.0", "Msxml2.XMLHTTP.3.0", "Msxml2.XMLHTTP" ); var loadfile = function (filename){ var xmlHttp = false; /*@cc_on @if (@_jscript_version >= 5) for (var i = 0; !xmlHttp && i < axo.length; i++) { try { xmlHttp = new ActiveXObject(axo[i]); } catch(e) { } } @else xmlHttp = false; @end @*/ if (!xmlHttp && typeof XMLHttpRequest != "undefined") { try{ // for Firefox, safari xmlHttp = new XMLHttpRequest(); //xmlHttp.overrideMimeType("text/xml"); } catch(e) { xmlHttp = false; } } xmlHttp.open("GET", filename, false); xmlHttp.send(null); return xmlHttp.responseText; }; if(lib){ var arry = this.repository; for(var i = 0; i < arry.length; i++){ var libpath = arry[i]; var fullpath = libpath + lib.replace(/\./,"/") + ".js"; eval(loadfile(fullpath)); alert(fullpath); } } } });
うーん、JSANだね、これは。
まさしくJSAN。
xmlhttprequestでjavascriptをevalしてるだけ。
あとnamespaceを作らないとうまく動かないのでuserscriptに制限がでちゃうってのがちょっと。
一応JSANのEXPORTのように定数アノテーションチックにロードしてもよかったけど1行
Kumu.Loader.importLib('<ライブラリ名>');
だけなのでこれでもいいかなあと。
まーあとはdocument.write版があればドメイン超えできますよって感じですなあ。
JSANを超えるのは結構大変だね。
一応これには応用が聞くのでこれはこれでいいかも。
例えば
Kumu.Container.get('<ユーザライブラリ名>', <設定JSON>);
のようにDIコンテナ風に読み込み時にごにょごにょできたりします。
(設定にはXMLでなくJSON使うのがjavascript流だそうです。)
肝心のごにょごにょって所のニーズがあるかわかりませんが。
うくく。