导出在线成员列表相应Js代码1

这段代码实现了一个浏览器的Blob对象和BlobBuilder的polyfill,用于支持那些不原生支持Blob和URL.createObjectURL的旧版浏览器。BlobBuilder允许创建Blob对象,而Blob对象可以用来表示不可变的原始数据。代码中还包含了对数据URI和Base64编码的支持。
摘要由CSDN通过智能技术生成

(function (view) {

  "use strict";

  view.URL = view.URL || view.webkitURL;

  if (view.Blob && view.URL) {

    try {

      new Blob;

      return;

    } catch (e) {

    }

  }

  // Internally we use a BlobBuilder implementation to base Blob off of

  // in order to support older browsers that only have BlobBuilder

  var BlobBuilder = view.BlobBuilder || view.WebKitBlobBuilder || view.MozBlobBuilder || (function (view) {

    var

      get_class = function (object) {

        return Object.prototype.toString.call(object).match(/^\[object\s(.*)\]$/)[1];

      }

      , FakeBlobBuilder = function BlobBuilder() {

        this.data = [];

      }

      , FakeBlob = function Blob(data, type, encoding) {

        this.data = data;

        this.size = data.length;

        this.type = type;

        this.encoding = encoding;

      }

      , FBB_proto = FakeBlobBuilder.prototype

      , FB_proto = FakeBlob.prototype

      , FileReaderSync = view.FileReaderSync

      , FileException = function (type) {

        this.code = this[this.name = type];

      }

      , file_ex_codes = (

        "NOT_FOUND_ERR SECURITY_ERR ABORT_ERR NOT_READABLE_ERR ENCODING_ERR "

        + "NO_MODIFICATION_ALLOWED_ERR INVALID_STATE_ERR SYNTAX_ERR"

      ).split(" ")

      , file_ex_code = file_ex_codes.length

      , real_URL = view.URL || view.webkitURL || view

      , real_create_object_URL = real_URL.createObjectURL

      , real_revoke_object_URL = real_URL.revokeObjectURL

      , URL = real_URL

      , btoa = view.btoa

      , atob = view.atob

      , ArrayBuffer = view.ArrayBuffer

      , Uint8Array = view.Uint8Array

      , origin = /^[\w-]+:\/*\[?[\w\.:-]+\]?(?::[0-9]+)?/

    ;

    FakeBlob.fake = FB_proto.fake = true;

    while (file_ex_code--) {

      FileException.prototype[file_ex_codes[file_ex_code]] = file_ex_code + 1;

    }

    // Polyfill URL

    if (!real_URL.createObjectURL) {

      URL = view.URL = function (uri) {

        var

          uri_info = document.createElementNS("http://www.w3.org/1999/xhtml", "a")

          , uri_origin

        ;

        uri_info.href = uri;

        if (!("origin" in uri_info)) {

          if (uri_info.protocol.toLowerCase() === "data:") {

            uri_info.origin = null;

          } else {

            uri_origin = uri.match(origin);

            uri_info.origin = uri_origin && uri_origin[1];

          }

        }

        return uri_info;

      };

    }

    URL.createObjectURL = function (blob) {

      var

        type = blob.type

        , data_URI_header

      ;

      if (type === null) {

        type = "application/octet-stream";

      }

      if (blob instanceof FakeBlob) {

        data_URI_header = "data:" + type;

        if (blob.encoding === "base64") {

          return data_URI_header + ";base64," + blob.data;

        } else if (blob.encoding === "URI") {

          return data_URI_header + "," + decodeURIComponent(blob.data);

        }

        if (btoa) {

          return data_URI_header + ";base64," + btoa(blob.data);

        } else {

          return data_URI_header + "," + encodeURIComponent(blob.data);

        }

      } else if (real_create_object_URL) {

        return real_create_object_URL.call(real_URL, blob);

      }

    };

    URL.revokeObjectURL = function (object_URL) {

      if (object_URL.substring(0, 5) !== "data:" && real_revoke_object_URL) {

        real_revoke_object_URL.call(real_URL, object_URL);

      }

    };

    FBB_proto.append = function (data/*, endings*/) {

      var bb = this.data;

      // decode data to a binary string

      if (Uint8Array && (data instanceof ArrayBuffer || data instanceof Uint8Array)) {

        var

          str = ""

          , buf = new Uint8Array(data)

          , i = 0

          , buf_len = buf.length

        ;

        for (; i < buf_len; i++) {

          str += String.fromCharCode(buf[i]);

        }

        bb.push(str);

      } else if (get_class(data) === "Blob" || get_class(data) === "File") {

        if (FileReaderSync) {

          var fr = new FileReaderSync;

          bb.push(fr.readAsBinaryString(data));

        } else {

          // async FileReader won't work as BlobBuilder is sync

          throw new FileException("NOT_READABLE_ERR");

        }

      } else if (data instanceof FakeBlob) {

        if (data.encoding === "base64" && atob) {

          bb.push(atob(data.data));

        } else if (data.encoding === "URI") {

          bb.push(decodeURIComponent(data.data));

        } else if (data.encoding === "raw") {

          bb.push(data.data);

        }

      } else {

        if (typeof data !== "string") {

          data += ""; // convert unsupported types to strings

        }

        // decode UTF-16 to binary string

        bb.push(unescape(encodeURIComponent(data)));

      }

    };

    FBB_proto.getBlob = function (type) {

      if (!arguments.length) {

        type = null;

      }

      return new FakeBlob(this.data.join(""), type, "raw");

    };

    FBB_proto.toString = function () {

      return "[object BlobBuilder]";

    };

    FB_proto.slice = function (start, end, type) {

      var args = arguments.length;

      if (args < 3) {

        type = null;

      }

      return new FakeBlob(

        this.data.slice(start, args > 1 ? end : this.data.length)

        , type

        , this.encoding

      );

    };

    FB_proto.toString = function () {

      return "[object Blob]";

    };

    FB_proto.close = function () {

      this.size = 0;

      delete this.data;

    };

    return FakeBlobBuilder;

  }(view));

  view.Blob = function (blobParts, options) {

    var type = options ? (options.type || "") : "";

    var builder = new BlobBuilder();

    if (blobParts) {

      for (var i = 0, len = blobParts.length; i < len; i++) {

        if (Uint8Array && blobParts[i] instanceof Uint8Array) {

          builder.append(blobParts[i].buffer);

        }

        else {

          builder.append(blobParts[i]);

        }

      }

    }

    var blob = builder.getBlob(type);

    if (!blob.slice && blob.webkitSlice) {

      blob.slice = blob.webkitSlice;

    }

    return blob;

  };

  var getPrototypeOf = Object.getPrototypeOf || function (object) {

    return object.__proto__;

  };

  view.Blob.prototype = getPrototypeOf(new view.Blob());

}(

  typeof self !== "undefined" && self

  || typeof window !== "undefined" && window

  || this

));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值