catchremoteimage.js 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. ///import core
  2. ///commandsName catchRemoteImage
  3. /**
  4. * 远程图片抓取,当开启本插件时所有不符合本地域名的图片都将被抓取成为本地服务器上的图片
  5. *
  6. */
  7. UE.plugins['catchremoteimage'] = function () {
  8. if (this.options.catchRemoteImageEnable===false)return;
  9. var me = this;
  10. this.setOpt({
  11. localDomain:["127.0.0.1","localhost"],
  12. separater:'ue_separate_ue',
  13. catchFieldName:"upfile",
  14. catchRemoteImageEnable:true
  15. });
  16. var ajax = UE.ajax,
  17. localDomain = me.options.localDomain ,
  18. catcherUrl = me.options.catcherUrl,
  19. separater = me.options.separater;
  20. function catchremoteimage(imgs, callbacks) {
  21. var submitStr = imgs.join(separater);
  22. var tmpOption = {
  23. timeout:60000, //单位:毫秒,回调请求超时设置。目标用户如果网速不是很快的话此处建议设置一个较大的数值
  24. onsuccess:callbacks["success"],
  25. onerror:callbacks["error"]
  26. };
  27. tmpOption[me.options.catchFieldName] = submitStr;
  28. ajax.request(catcherUrl, tmpOption);
  29. }
  30. me.addListener("afterpaste", function () {
  31. me.fireEvent("catchRemoteImage");
  32. });
  33. me.addListener("catchRemoteImage", function () {
  34. var remoteImages = [];
  35. var imgs = domUtils.getElementsByTagName(me.document, "img");
  36. var test = function (src,urls) {
  37. for (var j = 0, url; url = urls[j++];) {
  38. if (src.indexOf(url) !== -1) {
  39. return true;
  40. }
  41. }
  42. return false;
  43. };
  44. for (var i = 0, ci; ci = imgs[i++];) {
  45. if (ci.getAttribute("word_img"))continue;
  46. var src = ci.getAttribute("data_ue_src") || ci.src || "";
  47. if (/^(https?|ftp):/i.test(src) && !test(src,localDomain)) {
  48. remoteImages.push(src);
  49. }
  50. }
  51. if (remoteImages.length) {
  52. catchremoteimage(remoteImages, {
  53. //成功抓取
  54. success:function (xhr) {
  55. try {
  56. var info = eval("(" + xhr.responseText + ")");
  57. } catch (e) {
  58. return;
  59. }
  60. var srcUrls = info.srcUrl.split(separater),
  61. urls = info.url.split(separater);
  62. for (var i = 0, ci; ci = imgs[i++];) {
  63. var src = ci.getAttribute("data_ue_src") || ci.src || "";
  64. for (var j = 0, cj; cj = srcUrls[j++];) {
  65. var url = urls[j - 1];
  66. if (src == cj && url != "error") { //抓取失败时不做替换处理
  67. //地址修正
  68. var newSrc = me.options.catcherPath + url;
  69. domUtils.setAttributes(ci, {
  70. "src":newSrc,
  71. "data_ue_src":newSrc
  72. });
  73. break;
  74. }
  75. }
  76. }
  77. },
  78. //回调失败,本次请求超时
  79. error:function () {
  80. me.fireEvent("catchremoteerror");
  81. }
  82. })
  83. }
  84. })
  85. };