2013-03-08 6 views
14

सबसे पहले, यह "उत्परिवर्तन पर्यवेक्षक कैसे बनाएं?" पोस्ट और मैंने एपीआई देखी है।आप ट्रिगर किए गए उत्परिवर्तन ऑब्सर्वर के लिए स्टैक ट्रेस कैसे प्राप्त करते हैं?

मैं सोच रहा था कि कोई उत्परिवर्तन होने पर "स्रोत" को प्रदर्शित करने का तरीका जानता है या नहीं। यह संभवतः किसी प्रकार का कामकाज होगा - मुझे एपीआई दस्तावेज़ों में इसका कोई उल्लेख नहीं दिख रहा है।

मैं यह पता लगाने की कोशिश कर रहा हूं कि displaystyle में none पर कोई तत्व कहां प्राप्त कर रहा है।

मेरे कोड इस तरह दिखता है:

{ 
    addedNodes: NodeList[] 

    attributeName: "style" 

    attributeNamespace: null 

    newValue: "display: none;" 

    nextSibling: null 

    oldValue: "" 

    previousSibling: null 

    removedNodes: NodeList[] 

    target: li#d526d311-e6e0-4ef1-a3a1-f8686bbb468f.group 

    type: "attributes" 

} 

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

var observer = new MutationObserver(function(mutations) { 
    mutations.forEach(function (mutation) { 
     if (mutation.attributeName === "style") { 
      var extendedMutation = _.extend({}, mutation, { 
       newValue: $(mutation.target).attr("style") 
      }); 

      console.log(extendedMutation); 
     } 
     }); 
}); 

observer.observe(row.element[0], { attributes: true, attributeOldValue: true }); 

मैं सर्वर उत्परिवर्तन घटनाओं है और वे इस की तर्ज पर देखने के लिए यह आ रहा है! कोई विचार?

कृपया ध्यान दें कि मैंने ctrl + f की कोशिश की है, लेकिन इसका कोई फायदा नहीं हुआ है।

डिबगर/अपवाद निर्गम (भी क्रोम के लिए करने की कोशिश की WebkitMutationObserver, एक ही परिणाम):

http://i.imgur.com/jYeqCPX.png

उत्तर

4

MutationObserver एपीआई, अतुल्यकालिक है सिर्फ अजाक्स की तरह। क्रोम में an example पर विचार करें:

var xhr = new XMLHttpRequest(); 
xhr.open("GET", "/"); 
xhr.onload = function() { debugger; }; 
xhr.send(); 

आप शायद पता हो के रूप में, onload के बाद वर्तमान फ़ंक्शन को निष्पादित किया जाता है कुछ समय तक नहीं चलता है। इस प्रकार, जब debuggeronload रन में कॉल करता है, तो फ़ंक्शन कॉल स्टैक आवश्यक रूप से साफ़ हो जाता है, और onload हैंडलर ताजा ढेर पर चलता है।

आप जानना चाहते हैं कि संपत्ति उत्परिवर्तन कहां होता है, लेकिन आप उस जानकारी को स्टैक ट्रेस से नहीं प्राप्त कर सकते हैं - यह onload हैंडलर के दृष्टिकोण से xhr.send() कहलाता था, यह जानने की कोशिश की जाएगी।

+0

सिर्फ इसलिए कि निष्पादन का "स्ट्रैंड" एसिंक है इसका मतलब यह नहीं है कि आपको अपने "पूर्व-इतिहास" का पता लगाने में कठिनाई होनी चाहिए यानी जब इसे बुलाया गया था, तो इससे पहले क्या हुआ था। अजाक्स कॉल के साथ आप (उदाहरण के लिए) अजाक्स ऑब्जेक्ट को लपेटने वाले वादे को अजाक्स कॉल तक ले जाने वाली स्टैक ट्रेस स्ट्रिंग को संलग्न कर सकते हैं। एक उत्परिवर्तन ऑब्सर्वर के साथ यह असंभव प्रतीत होता है। कष्टप्रद। –

9

मुझे पता है कि यह धागा बहुत पुराना है, लेकिन आजकल क्रोम से एसिंक्रोनस कॉल का पता लगाने के लिए एक उपकरण है, मैं इसका उल्लेख करना चाहता हूं।

क्रोम कॉल स्टैक Async विकल्प जो मुझे लगता है कि एक एसिंक्रोनस कॉल का पिछला निशान पूरा करेगा। यह विकल्प डेवलपर टूल्स -> कॉल स्टैक टैब में पाया जा सकता है। और Async विकल्प पर स्विच करके और MutationObserver कॉलबैक फ़ंक्शन पर ब्रेक पॉइंट डालकर, हम पूर्ण कॉल स्टैक देख पाएंगे।

उम्मीद है कि यह मदद करता है।

+0

आईएमओ, यह शीर्ष की तुलना में एक बेहतर उत्तर है। – candrews

+0

अरे! यह "async" चेकबॉक्स अब क्रोम DevTools से गायब प्रतीत होता है (v 60.0 ...)। शायद यह कहीं और चला गया है? एफएफ के लिए ऐसा कुछ भी? मुझे क्रोम से नफरत है। –

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