You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

49 lines
973 B

  1. /**
  2. * Create a blob builder even when vendor prefixes exist
  3. */
  4. var BlobBuilder = global.BlobBuilder
  5. || global.WebKitBlobBuilder
  6. || global.MSBlobBuilder
  7. || global.MozBlobBuilder;
  8. /**
  9. * Check if Blob constructor is supported
  10. */
  11. var blobSupported = (function() {
  12. try {
  13. var b = new Blob(['hi']);
  14. return b.size == 2;
  15. } catch(e) {
  16. return false;
  17. }
  18. })();
  19. /**
  20. * Check if BlobBuilder is supported
  21. */
  22. var blobBuilderSupported = BlobBuilder
  23. && BlobBuilder.prototype.append
  24. && BlobBuilder.prototype.getBlob;
  25. function BlobBuilderConstructor(ary, options) {
  26. options = options || {};
  27. var bb = new BlobBuilder();
  28. for (var i = 0; i < ary.length; i++) {
  29. bb.append(ary[i]);
  30. }
  31. return (options.type) ? bb.getBlob(options.type) : bb.getBlob();
  32. };
  33. module.exports = (function() {
  34. if (blobSupported) {
  35. return global.Blob;
  36. } else if (blobBuilderSupported) {
  37. return BlobBuilderConstructor;
  38. } else {
  39. return undefined;
  40. }
  41. })();