Chúng tôi đã phát hiện ra một trường hợp khá phức tạp khi gỡ lỗi phiên bản cũ của trình chỉnh sửa Redactor. Trong hai từ, việc xóa nút span
khỏi phạm vi lựa chọn dẫn đến hành vi không chính xác của execCommand
trong Chrome v60, mặc dù trong Firefox và Chrome v58 hoạt động chính xác.ExecCommand hoạt động không chính xác trong Chrome 60 sau khi xóa nút khỏi phạm vi lựa chọn
Đây là vấn đề tái tạo sự cố: https://jsfiddle.net/47wqpv1f/4/.
Chọn một từ và nhấn nút. Bạn có thể thấy ở đây rằng trong Firefox và Chrome 58 văn bản sẽ được striked thông qua trong khi trong Chrome 60 nó vẫn còn bị ảnh hưởng.
Trên hành động định dạng, ví dụ: Bold, trình chỉnh sửa bao quanh phạm vi lựa chọn với hai phần tử "điểm đánh dấu" khác nhau.
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);
Sau đó, trình chỉnh sửa thực hiện một số thao tác với lựa chọn và sau đó đặt lại lựa chọn để khớp với ranh giới điểm đánh dấu.
range.setStart(document.getElementById('selection-marker-1'), 0);
range.setEnd(document.getElementById('selection-marker-2'), 0);
Sau khi trình chỉnh sửa đó xóa các nút đánh dấu, theo ý tưởng nên duy trì lựa chọn ban đầu.
marker.parentNode.removeChild(marker);
marker2.parentNode.removeChild(marker2);
Tiếp theo, trình chỉnh sửa sẽ thêm lại điểm đánh dấu cho bước tiếp theo của quy trình định dạng và sau đó thực hiện execCommand
để thực hiện.
Chrome 60 sẽ chỉ thêm strike
thẻ vào điểm đánh dấu bên trái, trong khi các trình duyệt được đề cập khác sẽ quấn strike
xung quanh toàn bộ lựa chọn (đây là hành vi mong đợi đối với tôi trong trường hợp này).
Tôi có thể nghĩ cách giải quyết khác nhau ở đây nhưng lý do thực sự của việc thay đổi hành vi trong Chrome mới là gì?
Nó thường được gọi là [một lỗi] (https://upload.wikimedia.org/wikipedia/commons/thumb/9/99/Leptoglossus_occidentalis_g3.jpg/800px-Leptoglossus_occidentalis_g3.jpg). Rất nhiều phần mềm có nó, và để giải quyết những điều này, một số công ty sử dụng các công cụ theo dõi, để cho người dùng của họ thừa nhận về nó, và cuối cùng là cố gắng loại bỏ chúng. Nhóm phát triển phần mềm bạn tìm thấy mẫu này có [công cụ này] (http://chromiumbugs.appspot.com/), tất cả đều mở cho bạn. – Kaiido