2010-01-07 17 views
9

Uzantımda bildirilen bir Javascript işlevi web sayfamdan bir html düğmesi kullanarak nasıl çağrılır?html düğmesinden Firefox eklentisindeki bir işlevi nasıl çağırılır

İçinde bir düğme bulunan bir html sayfam var. Kullanıcı düğmeyi tıkladığında, kendi firefox eklentisi içinde zaten bildirdiğim bir işlevi çağırır.

+0

bu hata var bunu çözmek için nasıl mülk XPCComponents.classes herhangi bir fikir elde etmek için izin engellendi? –

+0

cevap

5

Firefox eklentiniz HTML sayfanıza farklı bir Javascript içeriğinde çalışır, böylece uzantı doğrudan HTML sayfanızdaki Javascript'ten çağrılmaz. Ancak, HTML'den erişime izin vermek için uzantıyı tasarlayabilirsiniz. HTML Javascript'in genellikle Bileşen nesnesine erişmesine izin verilmez; bu nedenle, HTML kodunun uzantınızdaki nesneyi almanın bir yolu olmasına izin vermeniz gerekir. Bunu yapmak için, uzantınızda bir XPCOM bileşeni oluşturun ve nesneyi nsICategoryManager nesnesi aracılığıyla "JavaScript global özelliği" kategorisinde ayarlayın. Giriş adı, ayrıcalıklı olmayan Javascript'ten kullanılan dizedir, değer, XPCOM sınıfınızın sözleşme kimliğidir. Bununla birlikte, aynı zamanda, nesnenize ayrıcalıklı olmayan Javascript erişimine izin vermeniz veya komut dosyası güvenlik yöneticisinin erişimi engelleyeceği de gerekir. Buna izin vermek için nsISecurityCheckedComponent - canCreateWrapper (nsIIDPtr iid içinde), canCallMethod (wnsring yöntemAdı içinde nsIIDPtr iid içinde), canGetProperty (nsIIDPtr iid, wstring özellikAdı) ve canSetProperty (nsIIDPtr iid içinde, wstring özellikAdı) öğesini allAccess'e döndürür izin verilen özellikler ve aksi halde Erişim.

Kullanıcı girişi ile ne yaptığınıza ve erişime izin verdiğinize dikkat edin; yanlışlıkla tarayıcının bunu yaparken bir güvenlik deliği oluşturması çok kolaydır.

+1

tl; dr :) Bu, göründüğü orijinal sorun için bir aşırı sıkma, cevabımı gör. – Nickolay

7

web sayfasını kontrol yana, en kolay ve en güvenli yöntem uzatma kodunda buna web sayfasında özel bir DOM olayı gönderin ve dinlemek olacağını istediğini yapmak:

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

Tam olarak bu http://mozilla.doslash.org/cw/ (en son Firefox sürümüne güncelleştirilmemiş, ancak temiz ve güncelleştirmesi kolay olmalıdır) yazdığım bir örnek uzantıdır.

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

Bu şekilde onlar kod yerel erişmesine izin vermek isteyip için kullanıcıya seçenek sunmak olacaktır:

1

deneyin yerel bir dosya erişmeye çalıştığında sizin javascript fonksiyonu başında bu koymak dosya sistemi. Hata: Ben uzantısı içinde bir xml dosyasına yazmaya çalıştığınızda

İlgili konular