2017-08-17 9 views
20

रेडैक्टर संपादक के पुराने संस्करण को डीबग करते समय हमें एक बहुत ही मुश्किल मामला मिला है। दो शब्दों में, चयन श्रेणी से span नोड को हटाने से क्रोम v60 में execCommand का गलत व्यवहार होता है, हालांकि फ़ायरफ़ॉक्स और क्रोम v58 में यह सही तरीके से काम कर रहा था।ExecCommand चयन सीमा से नोड को हटाने के बाद क्रोम 60 में गलत तरीके से काम करता है

यहां समस्या का पुनरुत्पादन करने वाला पहेली है: https://jsfiddle.net/47wqpv1f/4/

एक शब्द का चयन करें और बटन दबाएं। आप यहां देख सकते हैं कि फ़ायरफ़ॉक्स और क्रोम 58 टेक्स्ट में क्रोम 60 के दौरान स्ट्रोक हो जाएगा, यह बिना छूटे रहेंगे।

स्वरूपण क्रिया पर, उदा। बोल्ड, संपादक दो अलग-अलग "मार्कर" तत्वों के साथ चयन सीमा को घेरता है।

var range2 = range.cloneRange(); 
    var marker = document.createElement('span'); 
    marker.id="selection-marker-1"; 
    marker.className="redactor-selection-marker"; 
    marker.innerHTML = markerHTML; 

    range2.collapse(true); 
    range2.insertNode(marker); 

फिर संपादक चयन के साथ कुछ जोड़ता है, और उसके बाद मार्कर सीमाओं से मेल खाने के लिए चयन को रीसेट करता है।

range.setStart(document.getElementById('selection-marker-1'), 0); 
    range.setEnd(document.getElementById('selection-marker-2'), 0); 

उसके बाद संपादक मार्कर नोड्स, जो विचार से मूल चयन की रक्षा करना चाहिए निकाल देता है।

marker.parentNode.removeChild(marker); 
    marker2.parentNode.removeChild(marker2); 

इसके बाद, संपादक स्वरूपण प्रक्रिया के अगले चरण के लिए फिर से मार्कर कहते हैं, और उसके बाद के माध्यम से हड़ताल के लिए execCommand करता है।

क्रोम 60 केवल बाएं मार्कर पर strike टैग जोड़ देगा, जबकि अन्य उल्लिखित ब्राउज़र पूरे चयन के आसपास strike लपेटेंगे (जो इस मामले में मेरे लिए अपेक्षित व्यवहार है)।

मैं यहां विभिन्न कामकाजों के बारे में सोच सकता हूं लेकिन नए क्रोम में व्यवहार बदलने का वास्तविक कारण क्या है?

+2

इसे आमतौर पर [एक बग] (https://upload.wikimedia.org/wikipedia/commons/thumb/9/99/Leptoglossus_occidentalis_g3.jpg/800px-Leptoglossus_occidentalis_g3.jpg) के रूप में जाना जाता है। बहुत से सॉफ़्टवेयर में यह है, और इन्हें संबोधित करने के लिए, कुछ कंपनियां अपने उपयोगकर्ताओं को इसके बारे में स्वीकार करने के लिए ट्रैकिंग-टूल्स का उपयोग करती हैं, और आखिरकार इन से छुटकारा पाने का प्रयास करती हैं। आपके द्वारा इस नमूने में मिले सॉफ़्टवेयर की डेवलपर टीम [यह टूल] (http://chromiumbugs.appspot.com/) है, जो आपके लिए खुली है। – Kaiido

उत्तर

3

यह संभवतः क्रोम में एक बग है, लेकिन ध्यान दें कि प्रति स्पेक (https://w3c.github.io/editing/execCommand.html) execCommand ड्राफ्ट में है और वहां रहने की उम्मीद है। यह समर्थित है, लेकिन हर ब्राउज़र में बिल्कुल उसी तरह समर्थित नहीं हो सकता है। अनुसरण करने के लिए एक ठोस विनिर्देश के बिना, ब्राउज़र संस्करणों और विशेष रूप से एक ब्राउज़र से दूसरे में भी कार्यान्वयन अलग-अलग होने की संभावना है।

दीर्घकालिक, आपको बेहतर परिभाषित मानकों (एक चुनौती, सुनिश्चित करने के लिए!) का उपयोग करने वाले कार्यान्वयन का उपयोग करके अधिक सफलता मिलेगी क्योंकि वे एक चलती लक्ष्य से कम हैं!

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