2011-06-05 16 views
5

मैं का उपयोग कर एक Firefox विस्तार से कस्टम जे एस कोड निष्पादित करने के लिए कोशिश कर रहा हूँ:Firefox विस्तार से जे एस निष्पादित

function executeJS(document, script) { 
    var script = document.createElement('script'); 
    script.setAttribute('type', 'text/javascript'); 
    script.appendChild(document.createTextNode(script)); 
    document.getElementsByTagName('head')[0].appendChild(script); 
} 

विधि कॉल लगता है:

executeJS(content.document, "$('#" + this.id + "').jixedbar({showOnTop:true});"); 

और यह परिणाम है कि मैं प्राप्त करें:

<script type="text/javascript"> 
    [object XPCNativeWrapper [object HTMLScriptElement]] 
</script> 

मेरे कोड में क्या गलत है? फ़ायरफ़ॉक्स एक्सटेंशन से मनमाने ढंग से जेएस स्क्रिप्ट निष्पादन का उचित तरीका क्या है?

उत्तर

3

मुझे एफएफ एक्सटेंशन के बारे में निश्चित नहीं है, लेकिन "सामान्य" जेएस-भूमि में, createTextNode व्यवसाय की कोई आवश्यकता नहीं है। एफएफ एक्सटेंशन के बाहर, आप Node.textContent — का उपयोग कर सकते हैं, हालांकि यह XPCNativeWrapper प्रकारों से भिन्न है।

script.textContent = 'var foo = 1; alert(foo);' 

मुझे लगता है कि मुख्य समस्या, हालांकि, आप भी एक चर और एक पैरामीटर दोनों script नामित मिल गया है कि है। इस प्रयास करें:

function executeJS(document, scriptContent) { 
    var script = document.createElement('script'); 
    script.appendChild(document.createTextNode(scriptContent)); 
    document.head.appendChild(script); 
} 

type विशेषता वास्तव में आवश्यक नहीं है, BTW है।


मैं सिर्फ this page भर में आया था, जो लगता है कि यह हो सकता है आप जो खोज रहे हैं:

const XUL = Namespace("xul", "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"); 

function injectScript(name) { 
    // Get the current filename 
    let file = Components.stack.filename; 
    // Strip off any prefixes added by the sub-script loader 
    // and the trailing filename 
    let directory = file.replace(/.* -> |[^\/]+$/g, ""); 

    // Create the script node 
    let script = document.createElementNS(XUL, "script"); 
    script.setAttribute("type", "application/javascript;version=1.8"); 
    script.setAttribute("src", directory + name); 

    // Inject it into the top-level element of the document 
    document.documentElement.appendChild(script); 
} 

// Inject the script 
injectScript("script.js"); 
+0

आप महान हो! परिवर्तनीय नामकरण समस्या थी ... – spektom

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