使用polyfill for Blob()后vanilla JS代码的更改

时间:2018-02-04 19:37:21

标签: javascript

我使用BlobFileReader来处理源自输入元素的一些图像文件。但是,为了安全起见,我已将整个操作包裹在if (window.FileReader && window.Blob) {}内。

最近,我在代码中添加了Blob的填充,以便在BlobBuilder不存在但Blob不存在的情况下使用BlobBuilder(某些移动浏览器。)

我的问题是:由于我已经添加了polyfill,我需要在if (window.FileReader && window.Blob) {}进行调整吗?例如。现在应该是if (window.FileReader && (window.Blob || window.BlobBuilder))吗?

我的目标是确保只在FileReader和polyfilled Blob存在时调用我的JS代码。

作为参考,这里使用Blob我的填充物:

Blob = (function() {
  var nativeBlob = Blob;

  // Add unprefixed slice() method.
  if (Blob.prototype.webkitSlice) {
    Blob.prototype.slice = Blob.prototype.webkitSlice;  
  }
  else if (Blob.prototype.mozSlice) {
    Blob.prototype.slice = Blob.prototype.mozSlice;  
  }

  // Temporarily replace Blob() constructor with one that checks support.
  return function(parts, properties) {
    try {
      // Restore native Blob() constructor, so this check is only evaluated once.
      Blob = nativeBlob;
      return new Blob(parts || [], properties || {});
    }
    catch (e) {
      // If construction fails provide one that uses BlobBuilder.
      Blob = function (parts, properties) {
        var bb = new (WebKitBlobBuilder || MozBlobBuilder), i;
        for (i in parts) {
          bb.append(parts[i]);
        }
        return bb.getBlob(properties && properties.type ? properties.type : undefined);
      };
    }        
  };
}());

如果经验丰富的开发人员有关于调整这种填充物的建议,我也会对此持开放态度。提前谢谢。

注意:在这个问题的范围内,让我们坚持使用纯JS。我是服务器端开发人员,他是JS的新手。在转向JQuery之前,我想学习vanilla JS基础知识。

1 个答案:

答案 0 :(得分:0)

如果您想确保if (window.FileReader && window.Blob) { ... } <profiles> <profile> <id>jshint</id> <activation> <file> <exists>${user.home}/.m2/repository/path/to/jshint/artifact.jar</exists> </file> </activation> <build> <plugins> <plugin> ... <plugin> <plugins> <build> </profile> </profiles> 都存在,那么这样做是准确的:

  <activeProfiles>
    <activeProfile>jshint</activeProfile>
  </activeProfiles>