2015-03-04 36 views
8

Tôi có popup.html nơi popup.js được gọi khi popup được tải bằng cách nhấp vào hành động của trình duyệt. Ở đó tôi đang chèn các đoạn mã nội dung theo chương trình với chrome.tabs.executeScript(). Tôi cần phải nối thêm một phần tử vào phần nội dung của trang. Làm thế nào tôi có thể chèn mã HTML từ tệp .html khác nhau trong phần mở rộng, vì nó dễ dàng hơn nhiều để duy trì mã như vậy. Tôi đã nghĩ đến việc truy cập nó trong popup.js (có một số cuộc gọi API cho điều đó không?) Và sau đó trong thuộc tính code để chèn mã tập lệnh nội dung bằng chuỗi mã HTML đã truy xuất.Cách đọc tệp từ tiện ích mở rộng của chrome?

Tôi đã thấy một số phương pháp sử dụng XMLHttpRequest từ tập lệnh nội dung, nhưng có để tránh điều đó không? Tôi đã thử với chrome.fileSystem, nhưng đó là dành cho các ứng dụng chrome và không phải là tiện ích mở rộng.

+0

Tôi đã nói chính xác rằng tôi không muốn sử dụng yêu cầu Ajax với XMLHttpRequest. Có cách nào để tải một HTML khác từ popup.js không phải là tập lệnh nội dung không? – Tommz

Trả lời

14

Như một nhận xét được đề cập, đó chỉ là câu hỏi về yêu cầu GET đến chrome.runtime.getURL("myfile.html"), trong đó "myfile.html" là đường dẫn tương đối (từ gốc của tiện ích mở rộng) đến tệp mà bạn muốn.

Bạn có thể làm điều đó với XHR thô hoặc nếu bạn đang sử dụng jQuery, sử dụng $.ajax.

Để làm điều đó từ tập lệnh nội dung, bạn cần khai báo nó trong "web_accessible_resources".


Vì bạn không muốn điều đó, có, có một cách khác (không có sẵn cho tập lệnh nội dung).

Bạn có thể lấy một read-only HTML5 Filesystem quyền truy cập vào tệp của tiện ích của bạn với chrome.runtime.getPackageDirectoryEntry:

chrome.runtime.getPackageDirectoryEntry(function(root) { 
    root.getFile("myfile.html", {}, function(fileEntry) { 
    fileEntry.file(function(file) { 
     var reader = new FileReader(); 
     reader.onloadend = function(e) { 
     // contents are in this.result 
     }; 
     reader.readAsText(file); 
    }, errorHandler); 
    }, errorHandler); 
}); 

Như bạn có thể thấy, đây là bao la phức tạp hơn một yêu cầu XHR. Người ta có thể chỉ sử dụng điều này nếu một người muốn list the files.

+0

Điều khiến tôi khó hiểu là các tập lệnh nội dung được chèn vào trang xem, nhưng các tệp javascript khác (chẳng hạn như chạy với các cửa sổ mở rộng) không có và chúng phải có cách để truy cập các tệp khác trong phần mở rộng, không phải vậy sao? Những kịch bản đó cũng cần phải thực hiện cuộc gọi ajax? – Tommz

+0

Xin lỗi, tôi nhận thấy yêu cầu của bạn trễ. Tôi hiện đang chỉnh sửa câu trả lời. – Xan

+0

Vâng, đúng vậy. Điều này thực sự phức tạp hơn nhiều. Cảm ơn những lời giải thích này. – Tommz

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