2008-09-30 10 views
8

मैं डेमो उद्देश्यों के लिए एक फ़ायरफ़ॉक्स एक्सटेंशन बना रहा हूं। मैं एक्सटेंशन से दस्तावेज़ में एक विशिष्ट जावास्क्रिप्ट फ़ंक्शन को कॉल करने के लिए। मैं अपने HTML दस्तावेज़ में यह लिखा (अंदर नहीं विस्तार है, लेकिन एक पेज कि फ़ायरफ़ॉक्स से भरी हुई है):फ़ायरफ़ॉक्स एक्सटेंशन से पृष्ठ-परिभाषित जावास्क्रिप्ट फ़ंक्शन को मैं कैसे निष्पादित करूं?

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

हालांकि यह:

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

फिर, विस्तार किसी घटना पर इस चलेंगे यह कहते हुए एक त्रुटि उठाती है कि funcToBeCalled परिभाषित नहीं है।

नोट: मैं document.getElementById(id);

उत्तर

8

यह सुरक्षा कारणों से है कि आपके पास एक्सटेंशन से सामग्री पृष्ठ तक सीमित पहुंच है। XPCNativeWrapper और Safely accessing content DOM from chrome,

देखें आप पेज को नियंत्रित करते हैं, तो यह करने के लिए सबसे अच्छा तरीका पेज में एक घटना श्रोता की स्थापना की और अपने विस्तार (एक्सटेंशन में पेज में addEventListener, dispatchEvent) से एक घटना प्रेषण है।

अन्यथा, देख http://groups.google.com/group/mozilla.dev.extensions/msg/bdf1de5fb305d365

+0

हम वास्तव में बिना किसी समस्या के (या कुछ "नियंत्रण पृष्ठ" सामान) इसे कर सकते हैं http://stackoverflow.com/questions/42577963/calling-web-sites-js-function-from-firefox-addon-web-extensions यह है क्रोम के लिए भी आसान है, लेकिन अब फ़ायरफ़ॉक्स के लिए वेब एक्सटेंशन के साथ केवल समस्या है – user25

0

आप यह कर सकते फोन करके दस्तावेज़ पर एक तत्व हो सकता है, लेकिन आप पेज पर नियंत्रण है और स्क्रिप्ट के लिए विशेषाधिकार स्तर को बढ़ाने के लिए सक्षम होना चाहिए। Mozilla Documentation gives an example - पृष्ठ पर "विशेषाधिकार" के लिए खोज।

+0

यह एक अलग प्रश्न का उत्तर है, और सिफारिश करने enablePrivilege सामान्य रूप में एक अच्छा विचार नहीं है। – Nickolay

6
document.wrappedJSObject.funcToBeCalled(); 

यह है सुरक्षित नहीं और अपने विस्तार के उन लोगों के लिए अपनी अनुमतियाँ तरक्की करने के लिए एक दुर्भावनापूर्ण पेज की अनुमति देता है ... लेकिन, यह आप क्या पूछा क्या करता है। शुरुआती greasemonkey vulnerabilities पर पढ़ें कि यह एक बुरा विचार क्यों है।

1

मेरे पास ऐसा करने का एक बहुत आसान तरीका है। मान लीजिए कि आपको xyz() फ़ंक्शन को कॉल करना है जो पृष्ठ पर लिखा गया है। और आपको इसे अपने प्लगइन से कॉल करना होगा।

एक बटन बनाएं ("इसे अदृश्य बनाएं। इसलिए यह आपके पृष्ठ को परेशान नहीं करेगा")। उस बटन पर क्लिक करने पर यह xyz() फ़ंक्शन कॉल करें।

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

अब प्लगइन में आपके पास पृष्ठ के लिए एक दस्तावेज़ ऑब्जेक्ट है। इसके mainDoc

जहां कॉल करने के लिए xyz (चाहते हैं) लगता है, सिर्फ इस लाइन पर अमल

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

यह xyz() फ़ंक्शन को कॉल करेंगे।

सौभाग्य :)

संबंधित मुद्दे