javascript - JQuery इंजेक्शन क्लिक करें()



onclick browser-extension (1)

मैं वर्तमान में एक ब्राउज़र एक्सटेंशन का निर्माण कर रहा हूँ जो कुछ पृष्ठों में जावास्क्रिप्ट / jquery को इंजेक्ट करता है, और मुझे एक अजीब .click() , जहां बल मिला। .click() ईवेंट मेरे इंजेक्शन कोड से काम नहीं कर रहे हैं। अजीब सा यह है कि अगर मैं कंसोल जेएस कन्सोल से कॉल करता हूं तो यह पूरी तरह से ठीक काम करता है

मुझे वास्तव में समझ में नहीं आता कि समस्या क्या है ऐसा लगता है कि मेरे सभी अन्य कॉल ठीक काम कर रहे हैं। मैं .click(function(){...}) का उपयोग करके इवेंट पर क्लिक करने के लिए बाध्य कर सकता हूँ (इतनी स्पष्ट रूप से मेरी jquery को ठीक तरह से लोड किया गया है), और कॉल विधियां जब चीजें क्लिक की जाती हैं (इतनी स्पष्ट रूप से मेरी jquery को ठीक से लोड किया गया है), लेकिन दूसरा, मैं एक क्लिक को लागू करने की कोशिश करता हूं, कॉल केवल के माध्यम से नहीं जाता है

क्या कोई यह समझा सकता है कि क्या हो रहा है, या जिस तरह से मैं इसके चारों ओर मिल सकता हूं?

(मैं इस मुद्दे को फिर से नहीं बना सकता, क्योंकि समस्या को स्पष्ट रूप से एक्सटेंशन में जेएस इंजेक्शन के साथ करना है)

यह मनोरंजन के लिए सबसे अच्छा मैं कर सकता हूं:

//I have tried all of these separately 
console.log($("#this_is_an_id"))  //This returns the correct element

$("#this_is_an_id").click()       //This does not work at all

$("#this_is_an_id").trigger("click") //I have also tried this without success

$("#this_is_an_id").click(function(){ console.log("stuff") }) //This works fine.

वास्तव में, इस समय मैं यह मान रहा हूं कि यह मेरी गलती नहीं है, लेकिन ऐसा कुछ जो स्क्रिप्ट के इंजेक्शन के ब्राउज़र की विधि के साथ गलत है। मैं वास्तव में इसे ठीक करने के तरीके के लिए देख रहा हूँ, मैं भी eval('$("#this_is_an_id").trigger("click")') की कोशिश की eval('$("#this_is_an_id").trigger("click")') क्या किसी के पास कोई अन्य सुझाव है?


अंत में मुझे इस मुद्दे के आसपास एक बहुत ही उत्कृष्ट उत्तर मिला / काम मिला: फ़ायरफ़ॉक्स ब्राउज़र एक्सटेंशन से ट्रिगर इवेंट्स?

उपयोगकर्ता सीएमएस से :

सबसे पहले, क्लिक ईवेंट के लिए, आपको ईवेंट इवेंट ऑब्जेक्ट के साथ माउसईवेंट बनाने, HTMLEvents से नहीं, और event.initMouseEvent का उपयोग event.initEvent के स्थान पर करने की आवश्यकता है।

एक्सयूएल ओवरले से फ़ायरफ़ॉक्स के मौजूदा टैब के दस्तावेज का उपयोग करने के लिए, आप सामग्री का उपयोग कर सकते हैं। दस्तावेज़ की संपत्ति, लेकिन जब से आपको पहले से ही क्लिक करने के लिए DOM तत्व तक पहुंच हो, तो आप नोड। इस नोड के लिए शीर्ष-स्तरीय दस्तावेज़ ऑब्जेक्ट देखें।

मैंने MouseEvents अनुकरण करने के लिए एक साधारण कार्य किया है:

function triggerMouseEvent(element, eventName, userOptions) {
  var options = { // defaults
    clientX: 0, clientY: 0, button: 0,
    ctrlKey: false, altKey: false, shiftKey: false,
    metaKey: false, bubbles: true, cancelable: true
     // create event object:
  }, event = element.ownerDocument.createEvent("MouseEvents");

  if (!/^(?:click|mouse(?:down|up|over|move|out))$/.test(eventName)) {
    throw new Error("Only MouseEvents supported");
  }

  if (typeof userOptions != 'undefined'){ // set the userOptions
    for (var prop in userOptions) {
      if (userOptions.hasOwnProperty(prop))
        options[prop] = userOptions[prop];
    }
  }
  // initialize the event object
  event.initMouseEvent(eventName, options.bubbles, options.cancelable,
                       element.ownerDocument.defaultView,  options.button,
                       options.clientX, options.clientY, options.clientX,
                       options.clientY, options.ctrlKey, options.altKey,
                       options.shiftKey, options.metaKey, options.button,
                       element);
  // dispatch!
  element.dispatchEvent(event);
}

उपयोग: ट्रिगरमाउसइवेंट (तत्व, 'क्लिक');

यहां परीक्षण उपयोग की जांच करें।

यदि आप ईवेंट ऑब्जेक्ट गुणों के मूल्यों को बदलना चाहते हैं, तो आप तृतीय ऑब्जेक्ट के रूप में एक वस्तु भी पास कर सकते हैं।

इस उत्तर के लिए बहुत बहुत धन्यवाद O_O





browser-extension