2011-10-11 20 views
7

Tôi đã làm việc trên Mozilla Add-on Development trong quá khứ (Beginner Level). Nhưng khi gặp XPCOM, tôi đã thực sự sợ hãi và để nó ở giữa.Sử dụng các thành phần XPCOM từ Mozilla Add-on SDK

Gần đây, tôi chỉ gặp SDK tiện ích và thấy nó thực sự tuyệt vời và thật thú vị khi thấy rằng công việc mất hàng tháng trước đó không quá 2 ngày làm việc với SDK. Bây giờ một lần nữa tôi bị tấn công vào mô-đun XPCOM.

Bây giờ tôi thực sự muốn khai thác sức mạnh của XPCOM nhưng tôi đang làm việc trên một thời hạn và nó sẽ đưa tôi ít nhất một tuần để làm quen với XPCOM trong bối cảnh SDK. Vì vậy, tôi đã tự hỏi nếu có ai đó có thể giúp tôi với mã nguồn của chức năng mà tôi mong muốn ...

  1. Đối với mỗi phiên người dùng, tôi muốn ghi lại nội dung nào đó. Tôi có thể phân biệt các phiên. Những gì tôi muốn bây giờ là mã để tạo ra một tập tin trong máy của người dùng, mở nó từ add-on và viết một cái gì đó vào nó.

  2. Mã để truy cập vào dấu trang và tài nguyên đã tải xuống và để đọc chúng.

Nó thực sự sẽ là một khoảnh khắc đau lòng nếu tôi phải chuyển từ SDK. Vì vậy, vui lòng giúp đỡ.

(tôi thực sự không có đủ sự tôn trọng để đưa Bounty vào nó, nhưng tôi sẽ đánh giá cao sự giúp đỡ nghiêm túc.)

+0

Làm thế nào mà bạn quản lý để có được những _hello world_ làm việc? Bạn có muốn chia sẻ một số tài liệu tham khảo với tôi không? Những gì tôi luôn luôn nhận được là 'Cc ['id hợp đồng của tôi'] là undefined'. Bạn có thể nhận được một số đại diện nếu bạn vui lòng trả lời [ở đây] (http://stackoverflow.com/questions/8477794/firefox-xpcom-hello-world-typeerror-cc-is-undefined). –

Trả lời

7

Các chrome package cung cấp cho bạn truy cập XPCOM đầy đủ. Để truy cập tập tin nó là tốt nhất để sử dụng FileUtils module:

var {Cc, Ci, Cu} = require("chrome"); 
var {FileUtils} = Cu.import("resource://gre/modules/FileUtils.jsm"); 
var file = FileUtils.getFile("ProfD", ["mylogfile.txt"]); 
var stream = FileUtils.openFileOutputStream(...); 
stream.write(data, data.length); 
stream.close(); 

Cú pháp hơi khác thường để nhập khẩu các mô-đun là do bug 683217. Lưu ý rằng FileUtils.openFileOutputStream() chỉ khả dụng bắt đầu với Firefox 7 và FileUtils.openSafeFileOutputStream() không thể sử dụng được nếu bạn muốn nối thêm vào một tệp.

Để truy cập bookmark bạn sử dụng thông thường code snippets, bắt đầu với:

var bmsvc = Cc["@mozilla.org/browser/nav-bookmarks-service;1"] 
       .getService(Ci.nsINavBookmarksService); 
+0

Tôi nhận ngoại lệ này khi chạy mã của bạn .. ** LoạiError: FileUtils.getFile không phải là chức năng ** Có yêu cầu bất kỳ thứ gì khác được đưa vào cấu trúc thư mục của Tiện ích bổ sung không? Tôi chỉ cần sao chép đơn giản dán mã của bạn với ** file ** biến được chuyển đến ** openFileOutputStream ** chức năng. – Shatu

+0

@Shatu: Xin lỗi, xấu của tôi - rất nhiều về việc đăng mã mà không thử nghiệm nó. 'Cu.import()' không trả về đối tượng 'FileUtils' mà là một đối tượng với' FileUtils' như một thuộc tính. Sửa mã của tôi trong câu trả lời, cũng là các tham số của 'FileUtils.getFile()'. –