2010-01-07 29 views
9

Cách gọi hàm Javascript được khai báo trong tiện ích của tôi, bằng cách sử dụng nút html từ trang web của tôi?cách gọi hàm trong tiện ích mở rộng của Firefox từ nút html

Tôi có trang html, có nút bên trong. Khi người dùng nhấp vào nút, nó sẽ gọi một hàm mà tôi đã khai báo bên trong phần mở rộng firefox của riêng tôi.

+0

Tôi đã nhận lỗi này khi tôi cố gắng viết vào một tập tin xml bên trong phần mở rộng: Lỗi: Permission denied cho để có được tài sản XPCComponents.classes Bất kỳ ý tưởng làm thế nào để giải quyết này? –

+0

Bạn đang đề cập đến một yếu tố

Trả lời

5

Tiện ích mở rộng Firefox của bạn chạy trong ngữ cảnh Javascript khác với trang HTML của bạn, do đó tiện ích mở rộng không thể được gọi trực tiếp từ Javascript trong trang HTML của bạn.

Tuy nhiên, bạn có thể thiết kế tiện ích để cho phép truy cập từ HTML. HTML Javascript thường không được phép truy cập đối tượng Component, vì vậy bạn cần cho phép mã HTML một cách để nhận được đối tượng trong phần mở rộng của bạn. Để thực hiện điều này, hãy tạo một thành phần XPCOM trong phần mở rộng của bạn và đặt đối tượng trong thể loại "Thuộc tính toàn cầu JavaScript" thông qua đối tượng nsICategoryManager. Tên mục nhập là chuỗi được sử dụng từ Javascript không có đặc quyền, giá trị là ID hợp đồng cho lớp XPCOM của bạn.

Tuy nhiên, bạn cũng cần phải cho phép truy cập Javascript không có đặc quyền vào đối tượng của mình hoặc trình quản lý bảo mật tập lệnh sẽ chặn quyền truy cập. Để cho phép điều này, hãy thực hiện nsISecurityCheckedComponent - cung cấp canCreateWrapper (trong nsIIDPtr iid), canCallMethod (trong nsIIDPtr iid, trong wstring methodName), canGetProperty (trong nsIIDPtr iid, trong wstring propertyName) và canSetProperty (trong nsIIDPtr iid, trong wstring propertyName) để trả về allAccess cho các thuộc tính được phép và không cóAccess.

Hãy cẩn thận những gì bạn làm với đầu vào của người dùng và những gì bạn cho phép truy cập - rất dễ vô tình tạo lỗ hổng bảo mật trong trình duyệt thực hiện việc này.

+1

tl; dr :) Đây là quá mức cần thiết cho vấn đề ban đầu, xem câu trả lời của tôi. – Nickolay

7

Kể từ khi bạn kiểm soát các trang web, dễ nhất và phương pháp an toàn nhất để làm những gì bạn muốn sẽ cử một sự kiện tùy chỉnh DOM trong trang web và nghe nó trong mã mở rộng:

https://developer.mozilla.org/En/Code_snippets/Interaction_between_privileged_and_non-privileged_pages

Đây là một phần mở rộng ví dụ tôi đã viết thực hiện chính xác điều này http://mozilla.doslash.org/cw/ (không được cập nhật lên phiên bản Firefox mới nhất, nhưng nó sạch sẽ và dễ dàng cập nhật).

1

Cố gắng đặt này vào đầu chức năng javascript của bạn mà cố gắng để truy cập vào một tệp cục bộ:

netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect'); 

này sẽ cung cấp cho người dùng các lựa chọn về việc liệu họ muốn cho phép mã của bạn để truy cập vào địa phương hệ thống tập tin.

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