2009-07-06 32 views
11

Làm cách nào để lập trình số phiên bản của tiện ích mở rộng của Firefox bằng Javascript?Làm cách nào để tiện ích mở rộng của Firefox có được số phiên bản riêng của chương trình?

Tiện ích mở rộng của tôi có tệp install.rdf chứa số phiên bản tương tự như bên dưới. Tôi muốn trích xuất nội dung của thẻ <em:version>.

<?xml version="1.0" encoding="UTF-8"?> 
<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
xmlns:em="http://www.mozilla.org/2004/em-rdf#"> 
    <Description about="urn:mozilla:install-manifest"> 
    ... 
    <em:version>1.0</em:version> 
    ... 
    </Description> 
</RDF> 

Trả lời

8

Tôi đã không nhận được câu trả lời đầy đủ, nhưng tôi thấy the Extended extension và đã có một cái nhìn tại các mã nguồn vì nó dường như là một điểm khởi đầu tốt, và từ Googling một số phương pháp trong đó tôi tìm thấy this snippet on MDC. Mã khóa chính có vẻ như sau:

var gExtensionManager = Components.classes["@mozilla.org/extensions/manager;1"] 
         .getService(Components.interfaces.nsIExtensionManager); 
var current = gExtensionManager.getItemForID("[email protected]").version; 

Bạn sẽ phải thay thế [email protected] bằng ID thích hợp cho tiện ích mở rộng của mình.

Firefox 4 yêu cầu mã khác, hãy xem câu trả lời khác.

+0

Tuyệt vời. Đó là câu trả lời đầy đủ! Tôi đã phải khởi tạo đối tượng gExtensionManager của riêng mình. – Mat

+0

Vâng nó không phải là một câu trả lời đầy đủ bởi vì tôi đã không thực sự chắc chắn nó sẽ làm việc :) – robertc

+1

Tôi không biết bất kỳ lợi thế để làm điều đó một cách này hay cách khác nhưng điều này thậm chí còn ngắn hơn: 'let version = Application. extensions.get ('extension @ id'). phiên bản; '(từ http://stackoverflow.com/questions/1965310/detecting-firefox-extension-version) – MatrixFrog

12

Trong Firefox 4 (Gecko 2) API đã thay đổi, vì vậy nếu bạn cần đến cổng lên Firefox 4, đây là mã (từ here):

try { 
    // Firefox 4 and later; Mozilla 2 and later 
    Components.utils.import("resource://gre/modules/AddonManager.jsm"); 
    AddonManager.getAddonByID("[email protected]", function(addon) { 
     alert("My extension's version is " + addon.version); 
    }); 
} 
catch (ex) { 
    // Firefox 3.6 and before; Mozilla 1.9.2 and before 
    var em = Components.classes["@mozilla.org/extensions/manager;1"] 
      .getService(Components.interfaces.nsIExtensionManager); 
    var addon = em.getItemForID("[email protected]"); 
    alert("My extension's version is " + addon.version); 
} 
+0

Thay đổi lớn là Firefox 4 API không đồng bộ, trong khi Firefox 3 API được đồng bộ hóa. Nếu bạn cần chặn, hãy đặt mã phụ thuộc vào cuộc gọi lại. –

+0

@ Xu hướng vua: đó là sự thật và cách giải quyết hoàn hảo là lưu số phiên bản ở đâu đó bên trong tiện ích mở rộng khi tiện ích khởi động và truy xuất đồng bộ khi bạn cần. Các cuộc gọi không đồng bộ thực sự lây nhiễm. –

+0

Phiên bản sẽ hoạt động tốt với cách tiếp cận của bạn vì nó là thuộc tính của tiện ích. Tuy nhiên, khi bạn cố gắng lấy thông tin liên quan đến người dùng như vị trí được cài đặt của tiện ích mở rộng, bạn không thể bỏ qua AddonManager ("ProfD/extensions/" không phải lúc nào cũng chính xác). –

1

Với Add-on SDK của nó đơn giản như :

var version = require("sdk/self").version;

0

Trong Extensions Web sử dụng như sau:

browser.runtime.getManifest().version 
Các vấn đề liên quan