Ajaxで今よみがえる(^^;;-->[クロスブラウザ技術 ]DHTMLサンプル集
古籏一浩さんとのはじめての共著 発売中-->『Ajax実践テクニック』 古籏一浩/高橋 登史朗 (著)秀和システム
配本予約開始-->『入門Ajax 増補改訂版 』 高橋 登史朗 (著)ソフトバンククリエイティブ ; ISBN: 4797336242
【カテゴリー】 AjaSQL ( 9 ) Ajax ( 514 ) Arax ( 1 ) canvas ( 7 ) CSS ( 7 ) DLNA ( 1 ) Dojo ( 12 ) DOM ( 42 ) ES4 ( 2 ) 反重力物質 ( 1 ) Flash ( 42 ) Flash Remoting ( 11 ) FTP ( 2 ) GAF ( 9 ) Google Maps ( 105 ) GPS ( 38 ) HTTPヘッダサンプル ( 8 ) IPv6 ( 1 ) 漫画 ( 1 ) Java ( 39 ) JavaScript ( 193 ) jKamo ( 8 ) jQuery ( 4 ) jsGadget ( 18 ) jslb_ ( 3 ) jslb_ajax ( 8 ) JSON ( 44 ) JSR223 ( 5 ) kjscmd ( 1 ) KNOPPIX ( 1 ) Linux ( 13 ) Mac ( 4 ) Memo ( 3 ) Microformats ( 2 ) Mini AJAX ( 2 ) MochiKit ( 1 ) Movable Type ( 48 ) MySQL ( 7 ) NewGameWeb ( 2 ) Nucleus ( 8 ) OpenAJAX ( 3 ) OpenDocument ( 1 ) OS ( 3 ) P2P ( 2 ) Perl ( 7 ) PHP ( 36 ) PostGIS ( 1 ) PostgreSQL ( 3 ) prototype.js ( 17 ) ROBOT ( 1 ) RSSリーダー ( 14 ) Ruby on Rails ( 6 ) Spry ( 6 ) SQLite ( 9 ) SQLiteWorker ( 2 ) ssh ( 1 ) SSI ( 2 ) SVG ( 15 ) TRON ( 1 ) Video ( 1 ) VML ( 1 ) Webサービス ( 83 ) widget ( 6 ) Wiki ( 1 ) Win ( 6 ) WSH ( 1 ) X01HT ( 28 ) XML ( 27 ) XOOPS ( 1 ) XQuery ( 2 ) XUL ( 3 ) Yahoo! UI ( 49 ) 日付入力用カレンダー ( 1 ) 『Ajax実践テクニック』 ( 1 ) 『入門 Ajax』 ( 42 ) WinTips ( 2 ) チューニング ( 10 ) ダイナミックロード関数 ( 4 ) ライブラリ ( 44 ) レーダー雨量表示 ( 1 ) ハード ( 13 ) ペンギン ( 2 ) ブラウザ ( 47 ) ブログでBBS ( 1 ) アクセスグラフ ( 3 ) カレンダーによる日付入力スクリプト ( 2 ) クロスブラウザ ( 10 ) クロスブラウザ関数 ( 7 ) スマートフォン ( 7 ) セキュリティ ( 82 ) ソフトイーサ ( 1 ) マッシュアップ ( 20 ) 暗号 ( 4 ) 映画 ( 41 ) 河川の水位グラフ ( 3 ) 回線 ( 2 ) 開発ツール ( 10 ) 牛久大仏 ( 7 ) 携帯 ( 94 ) 言語 ( 12 ) 故障 ( 1 ) 洪水警報システム ( 2 ) 今日のひと言 ( 2 ) 仕様 ( 28 ) 雑談 ( 171 ) 書籍 ( 15 ) 親子ウインドウ有無の確認関数 ( 3 ) 新海誠 ( 3 )
【クロスブラウザ関数 このページ内へのリンク】
【クロスブラウザ】getDynamicStyle()
【クロスブラウザ】showModalDialog/showModelessDialog
【jsGadet】ドラッガブルフロート+透明化フェイド
Dynamic HTML cross-browser/Examples
リンクが切れてました
クロスブラウザサンプル集
クロスブラウザ関数

[ クロスブラウザ関数 ]

このカテゴリーをyour [my del.icio.us]へ追加

2006年02月02日

【クロスブラウザ】getDynamicStyle() ()

クロスブラウザ , クロスブラウザ関数

インラインでスタイル指定しない場合の値は、たとえばoj.style.topなどでは取れない。という件について、いままでもいろいろなところで個別に話をしてきましたが、クロスブラウザ関数にしておきます。

たとえば、ページのどこかでtop:100pxなどと、明示的に指定していなければ、"auto"などが入っている可能性があることにも注意が必要です。

動的なスタイル値取得
getDynamicStyle(id,style)
http://jsgt.org/js/books/dhtml2/part3/cross/getdynamicstyle.htm
<html> <head> <style> #test{ position:absolute; top:100px; left:100px } </style> </head> <body> <div id="test">aaa</div> <script> alert("inlineのスタイル指定がなければ\ndocument.getElementById('test').style.topでは取得できません\n"+document.getElementById('test').style.top) a = getDynamicStyle('test','top'); alert("でもgetDynamicStyle('test','top')で大丈夫\n"+a) function getDynamicStyle(id,style){ if(!document.getElementById)return; var node = document.getElementById(id); if(node.currentStyle){ return node.currentStyle[style]; } else if(document.defaultView){ return document.defaultView.getComputedStyle(node,'').getPropertyValue(style); } else { return null } } //// // getDynamicStyle(id,style) //allow // Win e6 f1 o8 // Mac e5 f1 o8 s2 //deny // Mac s1.25 // Linux k3 // //@see http://www.mozilla-japan.org/docs/dom/domref/examples7.html //@see http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/objects/currentstyle.asp </script> </body> </html>


    高橋 ( 2006年02月02日 22:31 )

    はい、どうぞ〜。ライセンスはパブリックドメインです。改造、商用利用も切り張りも自由自在、連絡不要です。って、あえていうほどのコードでもないですねf^^;;

    Mitsuhal ( 2006年02月03日 04:44 )

    return node.currentStyle.top;

    return node.currentStyle[style];
    ですよね?

    高橋 ( 2006年02月03日 15:52 )

    Mitsuhal さんありがとうございます。
    直しました。

    高橋 ( 2006年02月03日 15:56 )

    Safari1はKonquerrorと同じバグっぽいです。document.defaultView.getComputedStyleまでは存在しているので、なにかの呪文で解けるかもしれないです。ちなみに(node,null)では駄目なことだけは確認しましたが、、、。

    高橋 ( 2006年02月03日 17:45 )

    インテルMacになるついでに、デフォルトもFirefoxしてくれないかな、、、動作確認が楽になる、、、とも限らないかなf^^??

    古籏一浩 ( 2006年02月04日 13:25 )

    Mac+Safari 2, Firefox 1.5でちゃんと動きました。
    う〜む、こういうのは便利ですね〜。
    使わせてもらってもいいですか?

    古籏一浩 ( 2006年02月04日 13:26 )

    どうもありがとうございますです。
    Safari 1でも動くとグッドなんですけどね〜。
    何か策があるかなあ。
    もうG5のHDDがいっぱいで身動きが取れないf(^^;
    HDD合計は2TB以上あるのに、残りが14.04GB...

    古籏一浩 ( 2006年02月04日 13:27 )

    for...inで中身を覗いてみると何かヒントとかないかなあ。
    ただ、DOM操作もSafariは思わぬ落とし穴があったりするので何とも...

    #頑張ってHDDの空きを33GBまで増やしましたf(^^;

    福田 ( 2006年06月17日 18:03 )

    はじめまして。
    先ほどから座標の位置が取得できずに
    5、6時間悩んでいたのですが、
    おかげ様で解決しました。ありがとうございます。


    【コメント】(←clickで入力欄open)
投稿者 tato : 16:46 | トラックバック (0)

2005年10月23日

【クロスブラウザ】showModalDialog/showModelessDialog ()

クロスブラウザ関数

puggyさんによる、
「showModalDialog,showModelessDialog の書き方で window.open() もやっちまおう」というスクリプトです。

// IE と Moz/FF のモードレスダイアログのオープン・値の受け渡し・戻り値の参照
// 方法を統一するインターフェース
// モードレス・モーダルダイアログ共通版

http://puggy.quu.cc/test/DialogTestMain.htm
対応ブラウザ
Moz1.6/FF1.0.6/Op8.5/IE6

投稿者 tato : 06:50 | トラックバック (0)

2005年07月09日

【jsGadet】ドラッガブルフロート+透明化フェイド ()

Ajax , jsGadget 】 , クロスブラウザ関数

【jsGadet】ドラッガブルフロートなDIV 透明フェイドな関数を組み合わせてみました。あとで、これも、合体してシンプルにしようっと。あ、Safariは、その時対応します。

【jsGadet】ドラッガブルフロートなDIVのサポートページ http://jsgt.org/mt/archives/01/000419.html

【サンプル】





    fox ( 2006年01月10日 14:46 )

    閉じるボタンつけられないでしょうか?

    高橋 ( 2006年01月10日 23:03 )

    div1.innerHTML="";
    とか、
    div1.style.width="0px";
    div1.style.height="0px";
    とかすれば消えますので、関数にしておくと良いかなと。


    【コメント】(←clickで入力欄open)
投稿者 tato : 22:32 | トラックバック (0)

2005年06月17日

Dynamic HTML cross-browser/Examples ()

クロスブラウザ関数

Ajax書くのに、クロスブラウザなテクニックは必須なので、
Dynamic HTML cross-browser/Examples
を、サーバー2カ所  3カ所!! にミラーな分散しました。
どっちか どれが落ちても大丈夫。。。。

ちょと古いサンプル集ですけど、逆に今ではなかなか調べにくいテクニックも満載ですから、Ajax書くときにはそれなりに必携でしょ(^^?
http://www.fureai.or.jp/~tato/DHTML/simple/contents.htm
http://jsgt.org/js/books/dhtml2/contents.htm
http://game.gr.jp/js/books/dhtml2/contents.htm



    puggy ( 2005年10月08日 08:51 )

    var aaa = html
    function HelloWorold() {
    alert(ok");
    }

    puggy ( 2005年10月08日 08:59 )

    ちょっと長いけど載せておきます。
    ダイアログ系が2大ブラウザでようやく完全ではない
    ものの互換性が取れるようになってきたので。

    でも、modal=yes はどーみても、モードレスですよね。
    これを、onblur="self.focus()" にしてもいいんだけど、
    これはこれで処理が複雑だし、結構面倒だから。

    でも、「常に前面に出る」窓を 普通の window.open
    でコンテンツの内容がどうであれ完全に再現可能な
    やり方をご存知であるならそれに置き換えてもいい
    かもしれませんね。。。

    ///////////////////////////////////////////////////////////////////////////////
    //
    // IE と Moz/FF のモードレスダイアログのオープン・値の受け渡し・戻り値の参照
    // 方法を統一するインターフェース
    // モードレス・モーダルダイアログ共通版
    //
    // コピペで貼り付けるHTMLタグ:
    //
    //
    //
    // 統一インターフェース(基本的にIEに倣う):
    // ●showModelessDialog(url,param,options)
    // ●showModalDialog(url,param,options)
    // ------------------+-------------+-------------------------------------------
    // parameter name | type | usage
    // ------------------+-------------+-------------------------------------------
    // url | "string" | url を指定する
    // param | "object" | 必ず DialogParam() オブジェクトを指定する
    // options | "string" | window.open() の指定と同じものを指定する
    // | | IE,Moz,FF,OP 等ブラウザによるオプション指定
    // | | 方法の違いを全て吸収します。
    // ------------------+-------------+-------------------------------------------
    // ●DialogParam(window_name)
    // ------------------+-------------+-------------------------------------------
    // parameter name | type | usage
    // ------------------+-------------+-------------------------------------------
    // window_name | "string" | ダイアログウィンドウに付ける固有の名前を
    // | | 指定する。モードレスダイアログのときのみ
    // | | window.xxxDialog.xxxx.xxxx 書式でダイアロ
    // | | グを参照できるようにする。
    // modal | boolean | modal=true,modeless=false を設定する
    // modeless | boolean | modal=false,modeless=true を設定する
    // | | modal=false,modeless=false は ChildWindow
    ////////////////////////////////////////////////////////////////////////////////
    // Dialog Style
    // IE: window.dialogArguments="object"
    // MZ: window.opener="object"
    // FF: window.opener="object"
    //
    // Window Style
    // IE: child Window の場合:window.opener="object",dialogArguments="undefined"
    // MZ: 同上
    // FF: 同上
    ////////////////////////////////////////////////////////////////////////////////
    //z-index をキープするメソッドと指定オプション一覧
    // method |o| option | usage
    // --------------------------+-+------------------+------------------------
    // showModalDialog |i| - | メソッド名称の通り
    // showModelessDialog |i| - |     〃
    // window.open |m| modal=yes | 第三引数に指定でモーダル
    // window.open |m| dependent=yes | 第三引数に指定でモードレス
    // ※現時点では、window.open("","","modal=yes"); はバグにより、"dependent=yes"
    // と等価。
    //
    ////////////////////////////////////////////////////////////////////////////////
    var _op_ = !!window.opener; //子窓で起動された
    var _ie_ = !!window.dialogArguments; //IE で動いているか(showModal を実装している)
    var _md_ = !!window.showModelessDialog; //showModal を実装している
    var _mf_ = navigator.userAgent.match(/(gecko|firefox)/i) != null; //Moz/Firefox

    ////////////////////////////////////////////////////////////////////////////////
    //
    // Public Methods
    //
    ////////////////////////////////////////////////////////////////////////////////
    // このモジュールの公開メソッド
    function DialogParam(window_name) {
    this["name"] = window_name;

    //起動時に再設定される
    this["modal"] = false;
    this["modeless"] = false;

    this.getVersion=function() { return "0.1"; }
    this.toString=function() {
    var k;
    var s="";
    for (k in this) {
    s += k + "=" + this[k] + "\n";
    }
    return s;
    }
    }
    var opt_mode = false;
    //false=window.open() オプションを IE 系オプション へ変換(デフォルト)
    //true =showModalDialog() オプションを window.open() 系オプションへ変換

    function useMM() { opt_mode = false;}
    function useIE() { opt_mode = true; }

    ////////////////////////////////////////////////////////////////////////////////
    //
    // showModalDialog and showModelessDialog の(再)定義
    //
    ////////////////////////////////////////////////////////////////////////////////
    //IE の場合:既存の showModal/Modeless をオーバーライドする
    //MZ の場合:新規の showModal/Modeless を作成する
    window.showModalDialog = function(dlg) { //モーダルダイアログ
    return function(url,obj,prm) {
    //IE だけ 第四パラメータ dlg を使う
    return OpenModalDialog(url,obj,prm,dlg);
    }
    }(window.showModalDialog);

    window.showModelessDialog = function(dlg) { //モードレスダイアログ
    return function(url,obj,prm) {
    //IE だけ 第四パラメータ dlg を使う
    return OpenModelessDialog(url,obj,prm,dlg);
    }
    }(window.showModelessDialog);

    ////////////////////////////////////////////////////////////////////////////////
    //
    // Private Methods
    //
    ////////////////////////////////////////////////////////////////////////////////
    //(絶対移動)
    //IE の モードレスダイアログは通常 moveTo では移動できません。
    //これを moveTo でも移動できるようにします。
    var InitMoveTo = function() {
    window.moveTo = function(mvto) {
    return function(x,y) {
    if (_ie_) window.dialogLeft=toPX(x),window.dialogTop=toPX(y);
    else mvto(x,y);
    }
    }(window.moveTo);
    }
    //(相対移動)
    //これも
    var InitMoveBy = function() {
    window.moveBy = function(mvby) {
    return function(x,y) {
    if (_ie_) window.dialogLeft=toPX(x),window.dialogTop=toPX(y);
    else mvby(x,y);
    }
    }(window.moveBy);
    }
    //数値を"px" 付き文字列に変換する
    var toPX = function(n) {
    var z = n;
    if (typeof n == "string") {
    try {
    z = parseInt(n);
    }
    catch( e ) {
    return n;
    }
    }
    return z + "px";
    }


    //------------------------------------------------------------------------------
    // モーダルダイアログをオープンする
    //------------------------------------------------------------------------------
    var OpenModalDialog = function(url,dialogParam,options,modalDialog) {

    if (_md_) {
    dialogParam.modeless = false;
    dialogParam.modal = true;

    var w = modalDialog(url,dialogParam,
    !opt_mode ? OptionConverter_ie(options) : options);
    window[dialogParam.name] = w;
    //w.returnValue = null;//戻り値は returnValue を見てね。
    return w;
    }
    else if (_mf_) {
    dialogParam.modal = false;
    dialogParam.modeless = true;

    if (opt_mode)
    options = OptionConverter_mm(options);

    var modal = "modal=yes"; //バグに付き、モードレスと同じ動作をしてしまう
    if (options.length > 0) modal+=",";
    options = modal + options;
    var w = window.open(url,dialogParam.name,options);
    //MZ/FF 系のモーダルダイアログはバグっています。
    //モーダルなのに動きはモードレスです。
    //なので IE とは互換になりません。注意!
    window[dialogParam.name+"_arguments"] = dialogParam;
    w.returnValue = null;
    return w;
    }
    else {
    dialogParam.modeless = false;
    dialogParam.modal = false;

    if (opt_mode)
    options = OptionConverter_mm(options);

    var w = window.open(url,dialogParam.name,options);
    window[dialogParam.name+"_arguments"] = dialogParam;
    w.returnValue = null;
    return w;
    }
    }
    //------------------------------------------------------------------------------
    // モードレスダイアログをオープンする
    //------------------------------------------------------------------------------
    var OpenModelessDialog = function(url,dialogParam,options,modelessDialog) {

    if (_md_) {
    dialogParam.modal = false;
    dialogParam.modeless = true;

    var w = modelessDialog(url,dialogParam,
    !opt_mode ? OptionConverter_ie(options) : options);
    window[dialogParam.name] = w;
    w.returnValue = null; //戻り値は returnValue を見てね。
    return w;
    }
    else if (_mf_) {
    dialogParam.modal = false;
    dialogParam.modeless = true;

    if (opt_mode)
    options = OptionConverter_mm(options);

    var dependent = "dependent=yes";
    if (options.length > 0) dependent+=",";
    options = dependent + options;
    var w = window.open(url,dialogParam.name,options);
    window[dialogParam.name+"_arguments"] = dialogParam;
    w.returnValue = null;
    return w;
    }
    else {
    dialogParam.modal = false;
    dialogParam.modeless = false;

    if (opt_mode)
    options = OptionConverter_mm(options);

    var w = window.open(url,dialogParam.name,options);
    window[dialogParam.name+"_arguments"] = dialogParam;
    w.returnValue = null;
    return w;
    }
    }

    //------------------------------------------------------------------------------
    //IE のオプションへ変換するテーブル
    //------------------------------------------------------------------------------
    //IE の他のオプションあれば適宜追加してください。但し、双方互換性のある
    //オプションじゃないと意味がありません。
    var opt_mm_to_ie = {
    "width" : "dialogWidth",
    "height" : "dialogHeight",
    "top" : "dialogTop",
    "left" : "dialogLeft",
    "status" : "status",
    "resizable" : "resizable",
    "scrollbars" : "scroll"
    };

    var opt_ie_to_mm = {
    // IE options | Moz/IE/FF/OP and other window.open() options
    "dialogWidth" : "width",
    "dialogHeight" : "height",
    "dialogTop" : "top",
    "dialogLeft" : "left",
    "status" : "status",
    "resizable" : "resizable",
    "scroll" : "scrollbars"
    };
    //------------------------------------------------------------------------------
    // option converter
    //------------------------------------------------------------------------------
    var OptionConverter = function(op, opts, dlm1, equ, dlm2) {
    var ar = op.split(dlm1);
    var ah = [];
    var an = [];
    for (var i=0;i < ar.length;i++) {
    var ss = ar[i].split(equ);
    ss[0] = ss[0].replace(/ /g,"");
    ss[1] = ss[1].replace(/ /g,"");
    ah[ss[0]] = ss[1];
    }
    for (var key in opts) {
    if (ah[key] != null) {
    var tan = key.match(/(width|height|top|left)/i) != null;
    var elm = ah[key];
    if (tan && elm.match(/^[+\-]*\d+$/)) {
    elm += "px";
    }
    an.push(opts[key]+":"+elm);
    }
    }
    op = an.join(dlm2);
    return op;
    }
    //window.open() 系オプションから IE 風オプションへ変換
    var OptionConverter_ie = function(op) {
    return OptionConverter(op,opt_mm_to_ie, ",", "=", ";");
    }
    //IE 風オプションから、window.open() 系オプションへ変換
    var OptionConverter_mm = function(op) {
    return OptionConverter(op, opt_ie_to_mm, ";", ":", ",");
    }
    //------------------------------------------------------------------------------
    // Initialize
    //------------------------------------------------------------------------------
    InitMoveTo();
    InitMoveBy();
    if (_op_) {
    if (window.opener[window.name+"_arguments"] != null)
    window.dialogArguments = window.opener[window.name+"_arguments"];
    }
    //------------------------------------------------------------------------------
    // End //2005/10/07(Fri)
    //------------------------------------------------------------------------------

    puggy ( 2005年10月08日 09:08 )

    確認取れているブラウザは、
    IE6
    Moz1.6
    FireFox1.0.6
    3つです。
    Moz と FF は既知の直さない予定のバグなそうな・・・
    alwaysRaised=yes がだいぶ前から実装されている
    のに直さないんだもん・・・あ、常に前面は治っている
    か。ちゅーても、
    2枚開くと片方親画面の後ろに行ってしまうバグも
    あるけどw>Moz/FF

    FFはActiveXBridge使っているような雰囲気だから、
    素直にIEと同じモーダルダイアログの中身を実装すればいいのにね〜。

    高橋 ( 2005年10月08日 21:23 )

    ども〜。
    このページ、ドラッガブルフロートのイベント処理のせいで、コピペが出来なくなってますね、、、(^^;ソース開いて、除去して、&lt;を変換して試しましたf^^;<自業自得。 IE のオプションへ変換するテーブル良い手ですね。クロスブラウザ時に、差異をあんな感じでまとめられれば、将来のメンテも見やすくて楽かも。Operaはまだ?なんですね。

    高橋 ( 2005年10月08日 21:26 )

    あ、「出現」さえさせなければ、コピペできるのか、、、。

    ( 2007年09月06日 10:31 )

    test


    【コメント】(←clickで入力欄open)
投稿者 tato : 18:58 | トラックバック (0)

2005年05月26日

リンクが切れてました ()

クロスブラウザ関数 , 雑談

かも日記のトップページ下の「クロスブラウザ関数」リンクが切れてました(_ _b せっかくトップにリンクしておいたのに、、、(^^;;;
投稿者 tato : 06:48 | トラックバック (0)

2005年02月27日

クロスブラウザサンプル集 ()

DOM , JavaScript 】 , クロスブラウザ関数

これも、リンクつけときます。
Win,Mac,Linux/IE,NN,Mozilla,Opera,SafariといったOSとブラウザの壁を越えて動作するクロスブラウザ関数と応用サンプル集です。正直、死にそうなくらい苦労して作った本です(^^;。
http://jsgt.org/js/dhtml2/contents.htm

投稿者 tato : 00:19 | トラックバック (0)

2004年10月24日

クロスブラウザ関数 ()

DOM , JavaScript 】 , クロスブラウザ関数

投稿者 tato : 12:01 | トラックバック (0)