2011-10-07 76 views
6

此代码在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

我不知道我当我点击该链接刚才发生了什么同意... – Blindy

+1

该文件在TEMPORARY存储中创建并随写入的内容下载。 –

+0

伙计们,这不是一个恶意代码,这段代码不会损害你的系统。 –

回答

4

由于您不允许在本地运行此代码,因此您得到FileError.SECURITY_ERR。如果您没有空错误处理程序,您会看到错误。

您将看到错误,如果你将下面的代码保存到本地文件,并在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> 
+0

你是对的 所以,这可能是什么可能的解决方案。 有没有什么办法可以让我从用户本身获得访问文件的权限。 –

+0

据我所知,没有办法使用'file://'url进行此项工作,除非您将代码作为镀铬扩展名运行 - “--allow-file-access-from-files”不会帮助您。远程运行它,它将工作,或为它建立一个chrome扩展,并将其作为特权代码运行。 –

+0

我可以构建一个Chrome扩展,但是您确定相同的代码也可以在那里运行 –

1

在本地系统上

Google Chrome对file://有一些限制。您可以尝试使用--allow-file-access-from-files运行Chrome。也许它会有所帮助。否则,您需要将网页放在某个开发服务器上进行测试。

相关问题