コンテンツにスキップ

利用者:青子守歌/trunk/LwMwApi.js

お知らせ: 保存した後、ブラウザのキャッシュをクリアしてページを再読み込みする必要があります。

多くの WindowsLinux のブラウザ

  • Ctrl を押しながら F5 を押す。

Mac における Safari

  • Shift を押しながら、更新ボタン をクリックする。

Mac における ChromeFirefox

  • Cmd Shift を押しながら R を押す。

詳細についてはWikipedia:キャッシュを消すをご覧ください。

// 重複読み込み対応
//if(LwMwApi)
{
    // MediaWiki API
    function LwMwApi(domain)
    {
        // APIのURLを設定
        var ApiUrl = (!domain ? (wgServer + wgScriptPath) : ("http://" + domain + "/w")) + "/api.php";

        // 同じウィキへのアクセス
        var RequestLocaly = function(paramStr, callback)
        {
            // XmlHttpRequestの作成
            var xhr = sajax_init_object();

            // 取得後に
            xhr.onreadystatechange = function()
            {
                if(xhr.readyState == 4)
                {
                    // コールバックを呼び出し
                    callback(JSON.parse(xhr.responseText));
                }
            }
            
            // JSON形式で結果を返すように設定して、APIにリクエストを送信
            xhr.open("POST", ApiUrl + "?format=json", true);
            xhr.setRequestHeader("Method", "POST " + this.ApiUrl + " HTTP/1.1");
            xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            xhr.send(paramStr);
        }

        // 外部ウィキへのアクセス
        var RequestRemotely = function(paramStr, callback)
        {
            // コールバック関数の名前を設定
            var name = "RemoteCallback" + LwMwApi.RemoteCallbackCount;

            // コールバック関数を設定
            LwMwApi[name] = callback;

            var script = document.createElement("script");
            script.setAttribute("type", "text/javascript");
            script.setAttribute("src", ApiUrl + "?format=json&callback=LwMwApi." + name + "&" + paramStr);
            document.getElementsByTagName("head")[0].appendChild(script);

            LwMwApi.RemoteCallbackCount++;
        }

        // APIを送信するメソッドの自動判定
        this.Request = function(params, callback)
        {
            // パラメータ文字列の生成
            var paramStr = "";

            // 各パラメータのキーについて
            for(var key in params)
            {
                // 値を取得
                var value = params[key];

                // パラメータ文字列を生成
                // 「&」「キー」「=」「配列なら|で結合したもの、それ以外なら文字列に変換したもの」
                paramStr +=  '&' + encodeURIComponent(key) + '='
                + encodeURIComponent((value instanceof Array)? value.join('|') : String(value) );
            }

            // 同一ドメインかどうかで、接続方法を設定
            ((wgServer == ApiUrl.substr(0, wgServer.length))? RequestLocaly : RequestRemotely)(paramStr, callback);
        }
        // 自分自身を返す
        return this;
    }

    // 外部APIへ接続した時のコールバック関数の数
    LwMwApi.RemoteCallbackCount = 0;
}