Код работает нормально на jsFiddle, но не в локальной системе

этот код отлично работает на jsFiddle, но не в моей системе. JsFiddle

Я проверил из черновика (нажав Ctrl + Shift + Enter на jsFiddle), добавил этот код в раздел head и изменил, как показано ниже:

window.addEvent('load', function() {
    window.webkitRequestFileSystem(window.TEMPORARY, 2*1024*1024, function(fs) {
        fs.root.getFile('test', {create: true}, function(fileEntry) {
            alert(fileEntry.toURL());
            fileEntry.createWriter(function(fileWriter) {
                var builder = new WebKitBlobBuilder();
                builder.append("Saurabh");
                builder.append("n");
                builder.append("Saxena");

                var blob = builder.getBlob('text/plain');

                fileWriter.onwriteend = function() {
                    // navigate to file, will download
                    location.href = fileEntry.toURL();
                };
                fileWriter.write(blob);
            }, function() {});
        }, function() {});
    }, function() {});
});

2 ответов


Вы получаете FileError.SECURITY_ERR потому что вам не разрешено запускать этот код локально. Вы бы увидели ошибку, если бы у вас не было пустых errorhandlers.

вы увидите ошибку, если сохраните следующий код в локальный файл и запустите его в chrome:

<html>
<script>
function doit() {

function errorHandler(e) {
  var msg = '';

  switch (e.code) {
    case FileError.QUOTA_EXCEEDED_ERR:
      msg = 'QUOTA_EXCEEDED_ERR';
      break;
    case FileError.NOT_FOUND_ERR:
      msg = 'NOT_FOUND_ERR';
      break;
    case FileError.SECURITY_ERR:
      msg = 'SECURITY_ERR';
      break;
    case FileError.INVALID_MODIFICATION_ERR:
      msg = 'INVALID_MODIFICATION_ERR';
      break;
    case FileError.INVALID_STATE_ERR:
      msg = 'INVALID_STATE_ERR';
      break;
    default:
      msg = 'Unknown Error';
      break;
  };

  console.log('Error: ' + msg);
}



window.webkitRequestFileSystem(window.TEMPORARY, 1024*1024, function(fs) {
        fs.root.getFile('test', {create: true}, function(fileEntry) {
            fileEntry.createWriter(function(fileWriter) {
                var builder = new WebKitBlobBuilder();
                builder.append("Saurabh");
                builder.append("\n");
                builder.append("Saxena");

                var blob = builder.getBlob('text/plain');

                fileWriter.onwriteend = function() {
                    // navigate to file, will download
                    location.href = fileEntry.toURL();
                };
                fileWriter.write(blob);
            }, errorHandler);
        }, errorHandler);
    }, errorHandler);
}
</script>

<body onload="doit();">

</body>
</html>

В Локальной Системе

Google Chrome имеет некоторые ограничения для file://. Вы можете попробовать запустить Chrome с помощью --allow-file-access-from-files. Может, это поможет. В противном случае вам нужно поместить веб-страницу на какой-либо сервер разработки, чтобы проверить ее.