كيف يمكنني تنفيذ وظيفة JavaScript محددة بالصفحة من امتداد Firefox؟

StackOverflow https://stackoverflow.com/questions/151555

سؤال

أقوم بإنشاء ملحق Firefox لأغراض العرض التوضيحي.أقوم باستدعاء وظيفة JavaScript محددة في المستند من الامتداد.لقد كتبت هذا في مستند HTML الخاص بي (ليس داخل الامتداد، ولكن في صفحة يتم تحميلها بواسطة Firefox):

document.funcToBeCalled = function() {
   // function body
};

بعد ذلك، سيقوم الامتداد بتشغيل هذا في بعض الأحداث:

var document = Application.activeWindow.activeTab.document;
document.funcToBeCalled();

ومع ذلك فإنه يثير خطأ في قول ذلك funcToBeCalled غير محدد.

ملحوظة:يمكنني الحصول على عنصر في المستند عن طريق الاتصال document.getElementById(id);

هل كانت مفيدة؟

المحلول

لأسباب أمنية، لديك وصول محدود إلى صفحة المحتوى من الامتداد.يرى XPCNativeWrapper و الوصول بأمان إلى المحتوى DOM من الكروم,

إذا كنت تتحكم في الصفحة، فإن أفضل طريقة للقيام بذلك هي إعداد مستمع حدث في الصفحة وإرسال حدث من ملحقك (addEventListener في الصفحة، وdisplayEvent في الملحق).

وإلا انظر http://groups.google.com/group/mozilla.dev.extensions/msg/bdf1de5fb305d365

نصائح أخرى

document.wrappedJSObject.funcToBeCalled();

هذا هو غير امن ويسمح للصفحة الضارة برفع أذوناتها إلى تلك الخاصة بامتدادك...لكنها تفعل ما طلبته.اقرأ في وقت مبكر نقاط الضعف في Greemonkey لماذا هذه فكرة سيئة.

لدي طريقة أبسط جدا للقيام بذلك.لنفترض أنه يتعين عليك استدعاء وظيفة xyz () المكتوبة على الصفحة.وعليك الاتصال به من البرنامج المساعد الخاص بك.

إنشاء زر ("اجعله غير مرئي.لذلك لن يزعج صفحتك").عند النقر فوق هذا الزر، قم باستدعاء وظيفة xyz() هذه.

<input type="button" id="testbutton" onclick="xyz()" />

الآن في البرنامج المساعد لديك كائن مستند للصفحة.لنفترض أن mainDoc

حيث تريد الاتصال بـ xyz()، فقط قم بتنفيذ هذا السطر

mainDoc.getElementById('testbutton').click();

سوف يستدعي الدالة xyz().

حظ سعيد :)

يمكنك القيام بذلك، ولكن يجب أن يكون لديك سيطرة على الصفحة وأن تكون قادرًا على رفع مستوى امتياز البرنامج النصي. وثائق موزيلا تعطي مثالا - ابحث عن "الامتياز" في الصفحة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top