2011-10-07 77 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。也許它會有所幫助。否則,您需要將網頁放在某個開發服務器上進行測試。

相關問題