5

मैं मोज़िला वेब एक्सटेंशन विकसित कर रहा हूं। मैं केवल उस फ्रेम में एक जावास्क्रिप्ट फ़ाइल इंजेक्ट करना चाहता हूं जिसमें मैंने contextMenus.create() के साथ बनाए गए संदर्भ मेनू चयन पर क्लिक किया है।किसी संदर्भ में iframeId कैसे प्राप्त करें मेनस ऑनक्लिक घटना हैंडलर?

मैं उपयोग कर रहा हूँ:

browser.contextMenus.create({ 
    "title": "Records", 
    "contexts": ["all","link"], 
    "id" : "M1", 
    "onclick": onClickContextMenu, 
}, function() { }); 

function onClickContextMenu(info, tab){ 

    var clickedFrameID=""; //How do I get the actual frameId where click occurred? 

    browser.tabs.executeScript(tab.id,{ 
         file: "fileName.js", 
         allFrames: false, 
         frameId: clickedFrameID 
        }, function() { 
     console.log("Script injected"); 
    }); 
} 

कैसे clickedFrameID पाने के लिए?

+1

हाँ, मैं एक ही मुद्दे का सामना करना पड़ रहा लेने के लिए। क्या कोई समाधान है? अग्रिम में Thanx। – MohammedAshrafali

+0

क्षमा करें श्रीमान इस, बात मैं contextMenus में कर रहा हूँ क्लिक किया घटना browser.contextMenus.create ({ "शीर्षक": "रिकॉर्ड्स", "संदर्भों": [ "सभी", "लिंक"], "आईडी" : "एम 1", "ऑनक्लिक": onClickContextMenu, }, फ़ंक्शन() { }); onClickContextMenu इस विधि में मैं fileName.js फ़ाइल इंजेक्शन लगाने हूँ, लेकिन यहाँ मैं वर्तमान iframe यहाँ के नहीं मिल रहा है फ्रेम आईडी मैं "जानकारी" और "टैब" वस्तु लेकिन iFrameId नहीं मिल रहा है –

+0

@ChandrakantThakkar फिर अपने प्रश्न में उस जानकारी को निर्दिष्ट , सिर्फ एक टिप्पणी में नहीं। जैसा कि आपका प्रश्न अभी है, यह ** बहुत व्यापक ** है और बंद हो सकता है। यदि आप स्पष्ट रूप से (और कोड में दिखाएं) को स्पष्ट करना चाहते हैं कि यह 'संदर्भ मेनू' आइटम में क्लिक के परिणामस्वरूप निष्पादित हो रहा है, तो यह करने के तरीके के साथ उत्तरदायी है। – Makyen

उत्तर

3

इतने सारे मुझे (चंद्रकांत ठक्कर) और मेरे दल के नेता श्री नितिन मकवाना इस स्थिति के लिए समाधान हो गया,

पहले परीक्षण मैं इंजेक्शन है manifest.json से सभी फ्रेम में "messageListener.js" फाइल करने के बाद के रूप में

"content_scripts": [ 
{ 
     "matches": ["https://*/*","http://*/*"], 
     "css":["jquery-ui.css"], 
     "js": [ 
      "jquery.js", 
      "jquery-ui.js",    
      "content_scripts/msg_listener.js" 
     ], 
     "all_frames":true 
} 
तब निर्मित "ContextMenu" श्रोता "messageListener.js" फ़ाइल में

फ़ाइल और जब मैं ContextMenu रूप

document.addEventListener("contextmenu", handleContextMenu, false); 
function handleContextMenu(event){ 
    browser.runtime.sendMessage("[email protected]",{type: 
    "onContextMenuClicked", sender:event }); 
} 
(राइट माउस के क्लिक) पर क्लिक करें पृष्ठभूमि js फाइल करने के लिए संदेश भेजने

यहां, "[email protected]" मेरे वेब एक्सटेंशन की आईडी है जहां मैं संदेश भेजना चाहता हूं।

फिर, मेरी पृष्ठभूमि js फ़ाइल में मैं में नीचे के रूप में

browser.runtime.onMessage.addListener(
    function(msg, sender, callback) { 
     if(msg.type === 'onContextMenuClicked') 
      { 
       if(sender.hasOwnProperty("frameId")){ 
        clickedFrameID=sender.frameId; 
       }else{ 
        clickedFrameID=""; 
       } 
      } 
}); 

अब मैं इंजेक्शन है "fileName.js" फ़ाइल onMessage श्रोता "clickedFrameID" नाम वैश्विक चर पर और एक फ़ाइल में मैं जोड़ लिया है घोषणा की है नीचे

var clickedFrameID=""; //This is a Global Variable 
    browser.contextMenus.create({ 
    "title": "Records", 
    "contexts": ["all","link"], 
    "id" : "M1", 
    "onclick": onClickContextMenu, 
    }, function() { }); 

function onClickContextMenu(info, tab){ 
    var options={}; 
    if(clickedFrameID !="" && clickedFrameID!=null && 
    clickedFrameID!=undefined) 
        { 
         options={ 
         file: "fileName.js", 
         allFrames: false, 
         frameId: clickedFrameID 
         }; 
        } 


    browser.tabs.executeScript(tab.id,options, function() { 
    console.log("Script injected"); 
    }); 
} 

अब के रूप में विशिष्ट फ़्रेम "fileName.js" कि मैं सही क्लिक किया है में विशिष्ट फ्रेम में इंजेक्ट कर दिया जाएगा।

धन्यवाद @wOxxOm, @MohammedAshrafali, @Makyen ब्याज

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