2009-07-06 35 views
36

Tôi khá chắc chắn câu trả lời là KHÔNG , và do đó Google Gears, adobe AIR vvjavascript có thể truy cập hệ thống tệp không?

Nếu tôi đã đúng, sau đó như thế nào http://tiddlywiki.com làm việc? Nó liên tục và được viết bằng javascript. Nó cũng chỉ là một tệp HTML duy nhất không có phụ thuộc bên ngoài (serverside). WTF? Nó lưu trữ trạng thái của nó ở đâu?

+0

http://www.html5rocks.com/en/tutorials/file/filesystem/ – Pacerier

Trả lời

45

Tiddlywiki có một số phương pháp lưu dữ liệu, tùy thuộc vào trình duyệt nào được sử dụng. As you could see in the source.

  • Nếu ActiveX được bật, nó sử dụng Scripting.FileSystemObject.
  • Trên trình duyệt dựa trên Gecko, nó cố gắng sử dụng UniversalXPConnect.
  • Nếu Java được bật, nó sử dụng ứng dụng Java TiddlySaver.
  • Nếu Java LiveConnect được bật, nó sẽ cố gắng sử dụng các lớp tệp của Java.
+0

Sẽ rất tốt nếu câu trả lời bao gồm con trỏ đến mã thực trong codebase github. – GabrielC

12

Nó sử dụng một file java tài liệu tham khảo như thế này:

drivers.tiddlySaver = { 
     name: "tiddlySaver", 
     deferredInit: function() { 
      if(!document.applets["TiddlySaver"] && !$.browser.mozilla && !$.browser.msie && document.location.toString().substr(0,5) == "file:") { 
       $(document.body).append("<applet style='position:absolute;left:-1px' name='TiddlySaver' code='TiddlySaver.class' archive='TiddlySaver.jar' width='1'height='1'></applet>"); 
      } 
     }, 
     isAvailable: function() { 
      return !!document.applets["TiddlySaver"]; 
     }, 
     loadFile: function(filePath) { 
      var r; 
      try { 
       if(document.applets["TiddlySaver"]) { 
        r = document.applets["TiddlySaver"].loadFile(javaUrlToFilename(filePath),"UTF-8"); 
        return (r === undefined || r === null) ? null : String(r); 
       } 
      } catch(ex) { 
      } 
      return null; 
     }, 
     saveFile: function(filePath,content) { 
      try { 
       if(document.applets["TiddlySaver"]) 
        return document.applets["TiddlySaver"].saveFile(javaUrlToFilename(filePath),"UTF-8",content); 
      } catch(ex) { 
      } 
      return null; 
     } 
    } 
2

Câu trả lời thực sự là NO. Java applet, và các plugin ActiveX sợ hãi thường được sử dụng nếu điều này là cần thiết

4

Về mặt kỹ thuật bạn có thể làm

netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserWrite'); 

trong một trình duyệt netscape tương thích (Firefox, Mozilla, Netscape), và nó sẽ yêu cầu người dùng * có hay không cho phép truy cập hệ thống tập tin, nhưng điều này không phải là di động.

* một lần cho mỗi quá trình duyệt

35

file HTML5 của [1], FileWriter [2], và FileSystem [3] API có sẵn trong các kênh phát triển mới nhất của Google Chrome. API FileSystem cho phép bạn đọc/ghi vào hệ thống tệp sandbox trong không gian mà trình duyệt biết. Ví dụ, bạn không thể mở thư mục 'My Pictures' trên FS nội bộ của người dùng và đọc/ghi vào đó. Đó là một cái gì đó trong công trình, nhưng nó sẽ không sẵn sàng trong một thời gian. Ví dụ về cách viết một tệp:

window.requestFileSystem(
    TEMPORARY,  // persistent vs. temporary storage 
    1024 * 1024,  // 1MB. Size (bytes) of needed space 
    initFs,   // success callback 
    opt_errorHandler // opt. error callback, denial of access 
); 

function initFs(fs) { 
    fs.root.getFile('logFile.txt', {create: true}, function(fileEntry) { 

    fileEntry.createWriter(function(writer) { // FileWriter 

     writer.onwrite = function(e) { 
     console.log('Write completed.'); 
     }; 

     writer.onerror = function(e) { 
     console.log('Write failed: ' + e.toString()); 
     }; 

     var bb = new BlobBuilder(); 
     bb.append('Lorem ipsum'); 
     writer.write(bb.getBlob('text/plain')); 

    }, errorHandler); 
    } 
} 

Kiểm tra HTML5 Storage slide deck này để biết thêm đoạn mã.

3

javascript có thể truy cập hệ thống tệp không?

Không nằm ngoài khu vực hộp cát nêu trên, theo hiểu biết tốt nhất của tôi. Tuy nhiên, nó có thể truy cập vào một applet java đã ký có các phương thức công khai có thể gọi đến mà có thể nhận được tất cả các tệp. Tôi đã làm nó và nó hoạt động tốt và là trình duyệt chéo.

Phần ký tên có phần liên quan và để sử dụng chuyên nghiệp, bạn có thể cần phải thanh toán cho chứng chỉ ký mã cho phép nhận dạng của bạn. Lấy nó từ một nơi nào đó như Verisign. Bằng cách đó người dùng ít nhất biết ai là applet được viết bởi (nếu điều đó giúp). Bạn có thể tự mình đăng ký miễn phí nhưng một trong những quảng cáo "có thể có nguy cơ bảo mật" sẽ xuất hiện khi sử dụng lần đầu tiên để được người dùng ủy quyền.

Bạn sẽ nghĩ rằng các ứng dụng đã ký để ghi tệp sẽ tồn tại để tải xuống nhưng tôi không thể tìm thấy bất kỳ thông qua tìm kiếm. Nếu họ đã làm, bạn chỉ có thể cắm nó vào trang của bạn, tìm hiểu các API và tắt bạn đi.

Các vấn đề liên quan