2012-01-02 16 views
21

Cả hai báo cáo window['localStorage']window.localStoragelưu trữ địa phương trong IE9 thất bại khi trang web được truy cập trực tiếp từ hệ thống tập tin

là không xác định khi truy cập vào url "file: /// C: /index.html"

LocalStorage có bị giới hạn khi chạy các trang web trên hệ thống tập tin không?

PS. Tôi đang chạy trang web trên điện thoại Windows 7 lưu trữ trang web trong isolatedStorage.

+0

HTML5 LocalStorage cần tên máy chủ/hoạt động. Hãy thử cài đặt apache cục bộ để thử nghiệm với http: // localhost/ – ChristopheCVB

Trả lời

23

Vâng, IE9 không hỗ trợ localStorage cho các tệp cục bộ. Không có trong bất kỳ tài liệu chính thức nào mà tôi có thể tìm thấy, nhưng cùng một vấn đề là described in this blog.

Bạn sẽ phải lưu trữ trang web bên ngoài hoặc tìm một số phương pháp khác để duy trì dữ liệu. [Tuy nhiên, [hỗ trợ cho bộ nhớ cục bộ kiểu HTML5 vẫn đang trong giai đoạn thử nghiệm ở nhiều trình duyệt. Đặc biệt đối với các trang trên hệ thống tệp cục bộ.]

Bạn có thể thử hành vi userdata, là giải pháp tiền W3C do Microsoft phát triển cho Internet Explorer. Tuy nhiên, không chắc chắn liệu nó có hỗ trợ các hệ thống tệp cục bộ hay không. Liên kết:

  1. http://www.javascriptkit.com/javatutors/domstorage2.shtml
  2. http://msdn.microsoft.com/en-us/library/ms531424(VS.85).aspx

Tài liệu tham khảo:

  1. https://bugzilla.mozilla.org/show_bug.cgi?id=507361
  2. https://stackoverflow.com/a/7377302/1122351
+0

Cảm ơn, tôi sẽ kiểm tra blog của bạn Chỉ tìm thấy câu trả lời này: http://stackoverflow.com/questions/3392032/using-localstorage-in- ie9-preview – DevNull

+0

Vâng, vấp phải một câu hỏi tương tự. [Xem liên kết được cập nhật]. Lấy làm tiếc! – benesch

+0

Tôi tin rằng WebDB, WebStorage và IndexDB có cùng một vấn đề Bây giờ bạn có phải là một thay thế cho localStorage sẽ làm việc với tệp: // không? – DevNull

1

Tôi có cùng một vấn đề và tìm thấy hai plugin với các giải pháp dự phòng:

https://github.com/andris9/jStorage

HTML5 Local Storage fallback solutions

Tôi thích là người đầu tiên một hơn bởi vì nó là nhỏ hơn và đơn giản hơn.

+0

sao jstorage hoạt động khi được sử dụng trên một tệp cục bộ, không phải trên một máy chủ? Ví dụ: nếu tôi có tệp tại C: \ test sử dụng jstorage, jstorage có hoạt động với IE9 không? Xem câu hỏi của tôi tại http://stackoverflow.com/q/24210706/2658159. –

5

Là phần thưởng bổ sung, IE sẽ giảm bớt mọi nỗ lực khắc phục sự cố này.

Điều lành mạnh để làm là nên còn sơ khai ra localStorage giả của riêng bạn để ít nhất điều bạn không phá vỡ khi tải nó từ FileSystem địa phương:

if (document.all && !window.localStorage) 
{ 
    window.localStorage = {}; 
    window.localStorage.removeItem = function() { }; 
} 

Bất kỳ đoán như những gì alert (window.localStorage) sẽ bật lên sau khi chạy nó? Bạn có đoán "không xác định" ???

Cảm ơn, IE! Bây giờ thực sự có một hack xấu xí chúng ta có thể làm để thực hiện công việc này. Kể từ khi trình duyệt IE sẽ không cho phép bạn sử dụng lại từ dành riêng của nó "localStorage", chúng tôi sẽ chỉ di chuyển toàn bộ điều trên để một nơi nào đó khác:

window.localStorageAlias = window.localStorage; 
if (document.all && !window.localStorage) 
{ 
    window.localStorageAlias = {}; 
    window.localStorageAlias.removeItem = function() { }; 
} 

Vì vậy, bây giờ, bất cứ nơi nào bạn muốn thường nói localStorage [ 'đậu'] = 7, bạn chỉ cần thực hiện localStorageAlias ​​['beans'] = 7 và bạn quay lại kinh doanh.Đương nhiên, IE sẽ không thực sự là lưu trữ mọi thứ ở giữa các phiên khi chạy từ hệ thống tệp cục bộ. Nhưng ít nhất nó sẽ không phá vỡ.

Để có thêm tín dụng, bạn có thể sửa mã trên để hoán đổi ở một dạng lưu trữ liên tục mà IE thực sự sẽ sử dụng sử dụng khi chạy cục bộ.

+1

Hack thú vị để tránh sự cố. Cảm ơn. Nhưng tôi nghi ngờ rằng có bất kỳ lựa chọn thay thế lưu trữ liên tục để được đổi chỗ. Tôi muốn có ở đâu. – DevNull

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