| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293 | "v0.4.6 Geetest Inc.";(function (window) {    "use strict";    if (typeof window === 'undefined') {        throw new Error('Geetest requires browser environment');    }    var document = window.document;    var Math = window.Math;    var head = document.getElementsByTagName("head")[0];    function _Object(obj) {        this._obj = obj;    }    _Object.prototype = {        _each: function (process) {            var _obj = this._obj;            for (var k in _obj) {                if (_obj.hasOwnProperty(k)) {                    process(k, _obj[k]);                }            }            return this;        }    };    function Config(config) {        var self = this;        new _Object(config)._each(function (key, value) {            self[key] = value;        });    }    Config.prototype = {        api_server: 'api.geetest.com',        protocol: 'http://',        typePath: '/gettype.php',        fallback_config: {            slide: {                static_servers: ["static.geetest.com", "dn-staticdown.qbox.me"],                type: 'slide',                slide: '/static/js/geetest.0.0.0.js'            },            fullpage: {                static_servers: ["static.geetest.com", "dn-staticdown.qbox.me"],                type: 'fullpage',                fullpage: '/static/js/fullpage.0.0.0.js'            }        },        _get_fallback_config: function () {            var self = this;            if (isString(self.type)) {                return self.fallback_config[self.type];            } else if (self.new_captcha) {                return self.fallback_config.fullpage;            } else {                return self.fallback_config.slide;            }        },        _extend: function (obj) {            var self = this;            new _Object(obj)._each(function (key, value) {                self[key] = value;            })        }    };    var isNumber = function (value) {        return (typeof value === 'number');    };    var isString = function (value) {        return (typeof value === 'string');    };    var isBoolean = function (value) {        return (typeof value === 'boolean');    };    var isObject = function (value) {        return (typeof value === 'object' && value !== null);    };    var isFunction = function (value) {        return (typeof value === 'function');    };    var callbacks = {};    var status = {};    var random = function () {        return parseInt(Math.random() * 10000) + (new Date()).valueOf();    };    var loadScript = function (url, cb) {        var script = document.createElement("script");        script.charset = "UTF-8";        script.async = true;        script.onerror = function () {            cb(true);        };        var loaded = false;        script.onload = script.onreadystatechange = function () {            if (!loaded &&                (!script.readyState ||                    "loaded" === script.readyState ||                    "complete" === script.readyState)) {                loaded = true;                setTimeout(function () {                    cb(false);                }, 0);            }        };        script.src = url;        head.appendChild(script);    };    var normalizeDomain = function (domain) {        // special domain: uems.sysu.edu.cn/jwxt/geetest/        // return domain.replace(/^https?:\/\/|\/.*$/g, ''); uems.sysu.edu.cn        return domain.replace(/^https?:\/\/|\/$/g, ''); // uems.sysu.edu.cn/jwxt/geetest    };    var normalizePath = function (path) {        path = path.replace(/\/+/g, '/');        if (path.indexOf('/') !== 0) {            path = '/' + path;        }        return path;    };    var normalizeQuery = function (query) {        if (!query) {            return '';        }        var q = '?';        new _Object(query)._each(function (key, value) {            if (isString(value) || isNumber(value) || isBoolean(value)) {                q = q + encodeURIComponent(key) + '=' + encodeURIComponent(value) + '&';            }        });        if (q === '?') {            q = '';        }        return q.replace(/&$/, '');    };    var makeURL = function (protocol, domain, path, query) {        domain = normalizeDomain(domain);        var url = normalizePath(path) + normalizeQuery(query);        if (domain) {            url = protocol + domain + url;        }        return url;    };    var load = function (protocol, domains, path, query, cb) {        var tryRequest = function (at) {            var url = makeURL(protocol, domains[at], path, query);            loadScript(url, function (err) {                if (err) {                    if (at >= domains.length - 1) {                        cb(true);                    } else {                        tryRequest(at + 1);                    }                } else {                    cb(false);                }            });        };        tryRequest(0);    };    var jsonp = function (domains, path, config, callback) {        if (isObject(config.getLib)) {            config._extend(config.getLib);            callback(config);            return;        }        if (config.offline) {            callback(config._get_fallback_config());            return;        }        var cb = "geetest_" + random();        window[cb] = function (data) {            if (data.status == 'success') {                callback(data.data);            } else if (!data.status) {                callback(data);            } else {                callback(config._get_fallback_config());            }            window[cb] = undefined;            try {                delete window[cb];            } catch (e) {            }        };        load(config.protocol, domains, path, {            gt: config.gt,            callback: cb        }, function (err) {            if (err) {                callback(config._get_fallback_config());            }        });    };    var throwError = function (errorType, config) {        var errors = {            networkError: '网络错误',            gtTypeError: 'gt字段不是字符串类型'        };        if (typeof config.onError === 'function') {            config.onError(errors[errorType]);        } else {            throw new Error(errors[errorType]);        }    };    var detect = function () {        return window.Geetest || document.getElementById("gt_lib");    };    if (detect()) {        status.slide = "loaded";    }    window.initGeetest = function (userConfig, callback) {        var config = new Config(userConfig);        if (userConfig.https) {            config.protocol = 'https://';        } else if (!userConfig.protocol) {            config.protocol = window.location.protocol + '//';        }        // for KFC        if (userConfig.gt === '050cffef4ae57b5d5e529fea9540b0d1' ||            userConfig.gt === '3bd38408ae4af923ed36e13819b14d42') {            config.apiserver = 'yumchina.geetest.com/'; // for old js            config.api_server = 'yumchina.geetest.com';        }        if (isObject(userConfig.getType)) {            config._extend(userConfig.getType);        }        jsonp([config.api_server || config.apiserver], config.typePath, config, function (newConfig) {            var type = newConfig.type;            var init = function () {                config._extend(newConfig);                callback(new window.Geetest(config));            };            callbacks[type] = callbacks[type] || [];            var s = status[type] || 'init';            if (s === 'init') {                status[type] = 'loading';                callbacks[type].push(init);                load(config.protocol, newConfig.static_servers || newConfig.domains, newConfig[type] || newConfig.path, null, function (err) {                    if (err) {                        status[type] = 'fail';                        throwError('networkError', config);                    } else {                        status[type] = 'loaded';                        var cbs = callbacks[type];                        for (var i = 0, len = cbs.length; i < len; i = i + 1) {                            var cb = cbs[i];                            if (isFunction(cb)) {                                cb();                            }                        }                        callbacks[type] = [];                    }                });            } else if (s === "loaded") {                init();            } else if (s === "fail") {                throwError('networkError', config);            } else if (s === "loading") {                callbacks[type].push(init);            }        });    };})(window);
 |