| 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);
 |