| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 | ///import core///commands 远程图片抓取///commandsName  catchRemoteImage,catchremoteimageenable///commandsTitle  远程图片抓取/** * 远程图片抓取,当开启本插件时所有不符合本地域名的图片都将被抓取成为本地服务器上的图片 */UE.plugins['catchremoteimage'] = function () {    var me = this,        ajax = UE.ajax;    /* 设置默认值 */    if (me.options.catchRemoteImageEnable === false) return;    me.setOpt({        catchRemoteImageEnable: false    });    me.addListener("afterpaste", function () {        me.fireEvent("catchRemoteImage");    });    me.addListener("catchRemoteImage", function () {        var catcherLocalDomain = me.getOpt('catcherLocalDomain'),            catcherActionUrl = me.getActionUrl(me.getOpt('catcherActionName')),            catcherUrlPrefix = me.getOpt('catcherUrlPrefix'),            catcherFieldName = me.getOpt('catcherFieldName');        var remoteImages = [],            imgs = domUtils.getElementsByTagName(me.document, "img"),            test = function (src, urls) {                if (src.indexOf(location.host) != -1 || /(^\.)|(^\/)/.test(src)) {                    return true;                }                if (urls) {                    for (var j = 0, url; url = urls[j++];) {                        if (src.indexOf(url) !== -1) {                            return true;                        }                    }                }                return false;            };        for (var i = 0, ci; ci = imgs[i++];) {            if (ci.getAttribute("word_img")) {                continue;            }            var src = ci.getAttribute("_src") || ci.src || "";            if (/^(https?|ftp):/i.test(src) && !test(src, catcherLocalDomain)) {                remoteImages.push(src);            }        }        if (remoteImages.length) {            catchremoteimage(remoteImages, {                //成功抓取                success: function (r) {                    try {                        var info = r.state !== undefined ? r:eval("(" + r.responseText + ")");                    } catch (e) {                        return;                    }                    /* 获取源路径和新路径 */                    var i, j, ci, cj, oldSrc, newSrc, list = info.list;                    for (i = 0; ci = imgs[i++];) {                        oldSrc = ci.getAttribute("_src") || ci.src || "";                        for (j = 0; cj = list[j++];) {                            if (oldSrc == cj.source && cj.state == "SUCCESS") {  //抓取失败时不做替换处理                                newSrc = catcherUrlPrefix + cj.url;                                domUtils.setAttributes(ci, {                                    "src": newSrc,                                    "_src": newSrc                                });                                break;                            }                        }                    }                    me.fireEvent('catchremotesuccess')                },                //回调失败,本次请求超时                error: function () {                    me.fireEvent("catchremoteerror");                }            });        }        function catchremoteimage(imgs, callbacks) {            var params = utils.serializeParam(me.queryCommandValue('serverparam')) || '',                url = utils.formatUrl(catcherActionUrl + (catcherActionUrl.indexOf('?') == -1 ? '?':'&') + params),                isJsonp = utils.isCrossDomainUrl(url),                opt = {                    'method': 'POST',                    'dataType': isJsonp ? 'jsonp':'',                    'timeout': 60000, //单位:毫秒,回调请求超时设置。目标用户如果网速不是很快的话此处建议设置一个较大的数值                    'onsuccess': callbacks["success"],                    'onerror': callbacks["error"]                };            opt[catcherFieldName] = imgs;            ajax.request(url, opt);        }    });};
 |