2011-06-18 33 views
8

Tôi muốn viết một tệp html nhỏ có thể chạy cục bộ và thao tác một tệp văn bản nhỏ trên máy tính của tôi. Yêu cầu của tôi là:Làm cách nào để truy cập và đọc tệp cục bộ từ trang html + javascript chạy cục bộ

  • bản tập tin nằm trong một thư mục trên máy tính của tôi (test.txt)
  • tập tin Html là trong cùng thư mục với tập tin văn bản (test.html)
  • Tôi muốn sử dụng javascript trong html để đọc và ghi tệp văn bản.

Điều này có thể thực hiện được không? Nếu có, làm cách nào để đọc và ghi tệp văn bản của tôi bằng javascript?

+0

Ban đầu, có vẻ như đây là bản sao và tôi đã bỏ phiếu để đóng. Xin lỗi vì chuyện đó. Phiếu bầu của tôi bị khóa và tôi không thể hoàn tác phiếu bầu. Nếu bạn đang sử dụng hệ thống cửa sổ, tôi có một vài gợi ý cho bạn. – KooiInc

Trả lời

7

Như đang được thảo luận trong câu trả lời của Itay Moav, việc ghi vào tệp cục bộ bằng tệp HTML cục bộ có thể là vấn đề mà không cần chạy ở chế độ đặc quyền nâng cao và có khả năng bổ sung Javascript (cho phép bạn lưu tệp cục bộ).

Tuy nhiên, việc truy cập tệp cục bộ từ tệp HTML là hoàn toàn có thể. Dưới đây là một số mã ví dụ.

mytext.txt

My local text file 

local.html

<html> 
<head> 
<base href="file:///C:/path/to/your/folder/"/> 
<script> 
window.onload = function(){ 
    var iframe = document.createElement('iframe'); 
    iframe.id = 'iframe'; 
    iframe.style.display = 'none'; 
    document.body.appendChild(iframe); 
    iframe.src = 'mytext.txt'; 
    setTimeout(function(){ 
     var text = document.getElementById('iframe').contentDocument.body.firstChild.innerHTML; 
     alert(text); 
    }, 1000); 
} 
</script> 
</head> 
<body> 
<h1>Hello World!</h1> 
</body> 
</html> 

Điều này sẽ làm cho một thứ hai cảnh báo 1 sau khi tải trang html (cho phép các iframe để nạp đầu tiên), và sẽ chứa nội dung trong tệp mytext.txt.

Lưu ý, nếu đó là văn bản thô, Firefox sẽ bọc nó bằng phần tử PRE, đó là lý do tại sao tôi đã làm firstChild. Ngoài ra, lưu ý việc sử dụng phần tử BASE, trỏ đến thư mục cục bộ của bạn với các tệp của bạn.

+0

cảm ơn đề xuất. là nó có thể viết các tập tin bằng cách nào đó, nếu cần thiết? – gyurisc

+0

@gyurisc - Không trừ khi bạn có một tập lệnh chạy cục bộ (chẳng hạn như JScript) với các khả năng đặc biệt. Ví dụ: Javascript không cho phép khám phá thư mục và thao tác tệp; bạn sẽ cần Javascript với khả năng thư mục cục bộ. –

+0

Firefox cho phép từ chối. – Andrew

2

Thông thường, điều đó là không thể và sẽ là vấn đề bảo mật.
Làm thế nào bao giờ, nếu bạn sử dụng một số bổ sung (ActiveX, FF phần mở rộng vv) họ có thể cho phép bạn làm như vậy.
Ngoài ra còn có chủ đề lưu trữ cục bộ bạn có thể sử dụng với các trình duyệt mới nhất.

Từ nhận xét của bạn, tôi tự hỏi tại sao không sử dụng PHP/Ruby bất kỳ ngôn ngữ phía máy chủ nào khác để làm như vậy? Chúng được thiết kế riêng cho điều đó.

+2

Tại sao lại là sự cố bảo mật đối với tệp html cục bộ để truy cập tệp văn bản cục bộ? –

+2

Làm thế nào để bạn phân biệt địa phương với bên ngoài?Điều gì sẽ ngăn cản tôi "đặt" một tập tin HTML trên máy tính của bạn, do đó nó là địa phương? –

+0

Tôi đã tự hỏi nếu trường hợp này là khác nhau như các tập tin html là đến từ cùng một thư mục như tập tin tôi muốn đọc/ghi. Vì vậy, chúng đến từ cùng một nguồn hoặc cùng một url. Không chắc chắn, nếu điều này là đúng, chỉ cần đoán ... – gyurisc

7

Ví dụ được đưa ra bởi Jared hoạt động tốt. Tuy nhiên, thiết lập thời gian không xác định là không hấp dẫn. Thay vào đó, hãy đính kèm sự kiện onload vào khung nội tuyến, gọi hàm đọc nội dung của tệp văn bản đang làm bất cứ điều gì càng sớm càng tốt.

Dưới đây là một ví dụ sửa đổi:

<html> 
<head> 
<script> 
function readfile() { 
    alert(document.getElementById('iframe').contentDocument.body.firstChild.innerHTML); 
} 
</script> 
</head> 
<body> 
<iframe id='iframe' src = 'test.txt' onload='readfile()'> </iframe> 
<h1>Hello World!</h1> 
</body> 
</html> 

Các test.txt tập tin giảm giá khóa học đã tồn tại trong cùng thư mục với file html trên chính nó.

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