2009-08-17 56 views
6

Tôi có một tập hợp các tệp HTML sử dụng JavaScript để tạo công cụ điều hướng, lập chỉ mục, TOC, v.v. Những tệp này chỉ có nghĩa là được mở cục bộ (ví dụ: tệp: //) và không được phân phát trên máy chủ web. Kể từ Firefox 3.x, chúng tôi gặp phải lỗi sau khi nhấp vào nút điều hướng sẽ tạo khung mới cho TOC:Làm thế nào để vượt qua giới hạn document.domain khi mở tệp cục bộ?

Error: Permission denied for <file://> to get property Location.href from <file://>. 

Tôi hiểu rằng điều này là do các biện pháp bảo mật trong FF 3.x không phải trong 2.x, trong đó document.domain không khớp, do đó, nó giả định đây là cross-site scripting và đang từ chối truy cập.

Có cách nào để giải quyết vấn đề này không? Có lẽ chỉ là một công tắc để tắt/mở trong Firefox? Một chút mã JavaScript để có được nó?

Trả lời

1

Trong firefox:

  1. Trong thanh địa chỉ, gõ about: config,
  2. sau đó gõ network.automatic-NTLM-auth.trusted-URI trong thanh tìm kiếm
  3. Nhập danh sách dấu phẩy tách ra của máy chủ (ví dụ, mạng nội bộ, gia đình, công ty)

Một cách khác là chỉnh sửa users.js.

Trong users.js, viết:

user_pref("capability.policy.policynames", "localfilelinks"); 
user_pref("capability.policy.localfilelinks.sites", "http://site1.com http://site2.com"); 
user_pref("capability.policy.localfilelinks.checkloaduri.enabled", "allAccess"); 

Nhưng nếu bạn muốn dừng lại tất cả xác minh, chỉ cần viết dòng sau vào tập tin users.js:

user_pref("capability.policy.default.checkloaduri.enabled", "allAccess"); 
+0

Đó có vẻ là những gì bạn muốn làm cho các tệp được phân phát trên máy chủ, nhưng nội dung nào tôi đang truy cập qua tệp: // không có miền? – Gudlyf

+0

Giải pháp này dành cho các trường hợp bạn có một trang web (được lưu trữ ở đâu đó) và nó cần đọc một số tệp trong ổ đĩa cứng của khách hàng. Một giải pháp khác là tắt chính sách này (Tôi đã chỉnh sửa câu trả lời của mình bằng cách thực hiện điều đó) - Tôi hiểu rõ điều này :) – Cleiton

+0

Điều này không có tác dụng đối với tôi trong Firefox 11. Tôi đã sử dụng user.js trong thư mục hồ sơ chính xác và Tôi đã thử trực tiếp nhập nó từ about: config. URL là "http: // localhost". – Michael

0

phương pháp Cleiton sẽ làm việc cho bản thân bạn hoặc cho bất kỳ người dùng nào bạn mong đợi sẽ trải qua quá trình thủ công này (có thể không trừ khi đây là công cụ dành cho bạn và đồng nghiệp của bạn hoặc thứ gì đó).

Tôi hy vọng rằng loại điều này sẽ không thể là, vì nếu có, điều đó có nghĩa là bất kỳ trang web nào có thể bắt đầu mở tài liệu trên máy của tôi và đọc nội dung của chúng.

0

Bạn có thể có tất cả các tệp mà bạn muốn truy cập trong các thư mục con liên quan đến trang đang thực hiện yêu cầu.

Bạn cũng có thể sử dụng JSONP để tải tệp từ mọi nơi.

+0

JSONP có thể hoạt động cho giao thức tệp không?Đó không phải là một lời nói hùng biện; Tôi thực sự tò mò. – Matchu

+0

Nếu dữ liệu của bạn có trong tệp: //mydata.jsonp và có vẻ như gọi lại = {data: "hello"} bạn có thể sử dụng JSONP để yêu cầu dữ liệu đó. –

-1

Add "file: //" để network.automatic-NTLM-auth.trusted-URI trong about: config

1

Bạn có thể sử dụng điều này trong firefox để đọc các tập tin.

function readFile(arq) { 
     netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); 
     var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile); 
     file.initWithPath(arq); 

     // open an input stream from file 
     var istream = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream); 
     istream.init(file, 0x01, 0444, 0); 
     istream.QueryInterface(Components.interfaces.nsILineInputStream); 
     var line = {}, lines = [], hasmore; 
     do { 
      hasmore = istream.readLine(line); 
      lines.push(line.value); 
     } while(hasmore); 
     istream.close(); 
     return lines; 
    } 
Các vấn đề liên quan