2016-05-25 23 views
5

Chúng tôi đang tạo trình chỉnh sửa có thể chỉnh sửa nội dung. Tự hỏi làm thế nào để ngăn chặn phần mở rộng như ngữ pháp (nếu được kích hoạt) trên trang trình soạn thảo bằng cách sử dụng javascript như những phần mở rộng chèn html của riêng mình trong trình soạn thảo chính nó. Nó cho chúng ta rất nhiều vấn đề trong khi lưu dữ liệu.Cách dừng tiện ích mở rộng/thêm nội dung như ngữ pháp trên trình chỉnh sửa có thể chỉnh sửa

Kiểm tra trình chỉnh sửa và tiện ích mở rộng/tiện ích bổ sung đã được kiểm tra không hoạt động ở đó. Bất kỳ tài liệu tham khảo hoặc giải pháp cho loại vấn đề? Đã tìm kiếm rất nhiều nhưng không thể tìm thấy giải pháp cho nó. Cảm ơn trước

+1

Có, tôi cũng gặp sự cố với ngữ pháp (nhưng đối với Chrome). Nó dường như hiện đang ồ ạt bloating tải trọng được đăng và gây ra để vượt quá kích thước cho phép cấu hình trong IIS gây ra một lỗi 500. – Dijkgraaf

+1

Tôi đã gửi email cho họ về vấn đề này và họ đã tắt plugin cho trang web của tôi. Làm việc cho tôi –

Trả lời

2

Nói chung, bạn không thể chống lại tiện ích. Chúng đại diện cho mục đích của người dùng được ưu tiên bởi các nhà cung cấp trình duyệt theo ý định của tác giả. Họ cũng có nhiều đặc quyền hơn trang web, ví dụ: họ có thể bỏ qua CSP.

Nó không phải là một cuộc chiến bạn có thể giành chiến thắng.

Options bạn có

  • thử anyway. trong trường hợp đó, bạn có thể kiểm tra nguồn bổ trợ - vì chúng được vận chuyển dưới dạng nguồn - và xem một số chuỗi sự kiện cụ thể (mất tiêu điểm? vô hiệu hóa nội dung có thể chỉnh sửa trước khi lưu?), hãy loại bỏ đánh dấu đã chèn
  • tác giả và hỏi họ ít xâm lấn
  • cảnh báo người dùng nếu bạn phát hiện hành vi như vậy

Checked biên tập trung

họ không sử dụng contenteditable.

https://medium.engineering/why-contenteditable-is-terrible-122d8a40e480

2

Vì vậy, đối Grammarly đặc biệt, nếu bạn là bệnh nhân/dai dẳng bạn có thể gửi một vé và họ sẽ vô hiệu hóa plugin của họ trên trang web của bạn. Họ sẽ không khắc phục vấn đề thực tế, họ vẫn tiêm thêm gần 4MB trọng tải vào trình soạn thảo của bạn, tôi vẫn thấy vấn đề khi sử dụng plugin của họ trên các trang web Dev và QA của chúng tôi.

Tôi đã sử dụng phương pháp phát hiện/cảnh báo người dùng/vô hiệu hóa trang. Thông báo hơi khác một chút so với Firefox nhưng để giữ mẫu bên dưới ngắn gọn, tôi đã loại bỏ các biến FF và ghi nhật ký của người dùng vi phạm.

/* vars intentionally over complicated to make detection more difficult */ 
//Chrome Message: gc; 
var r = /\{0\}/g; 
var gc = "PHN0eWxlPg0KCS5pY29uIHsNCgkJLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsNCgkJZGlzcGxheTogaW5saW5lLWJsb2NrOw0KCX0NCgkuaWNvbiB7DQoJCWJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7DQoJCWJhY2tncm91bmQtc2l6ZTogMTAwJTsNCgkJaGVpZ2h0OiA3MnB4Ow0KCQltYXJnaW46IDAgMCA0MHB4Ow0KCQl3aWR0aDogNzJweDsNCgl9DQoJLmljb24tZ2VuZXJpYyB7DQoJCWJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFKQUFBQUNRQVFNQUFBRGRpSEQ3QUFBQUJsQk1WRVVBQUFCVFUxT29hU2YvQUFBQUFYUlNUbE1BUU9iWVpnQUFBRkpKUkVGVWVGN3QwY0VOZ0RBTVE5RndZZ3hHNldqcGFJekNDQXhReFZnZ0Z1RGlDdmxMT2VSZEhSOXl6am5jSFZvcTNucHUrd1FVclV1Skh5bFNUbUJhZXNwSnlKUW9PYlVleXhEUWIzYkVtNUF1ODFjMHBTQ0Q4SFlBQUFBQVNVVk9SSzVDWUlJPSIpOw0KCX0NCgkuaW50ZXJzdGl0aWFsLXdyYXBwZXIgew0KCQlib3gtc2l6aW5nOiBib3JkZXItYm94Ow0KCQlmb250LXNpemU6IDFlbTsNCgkJbGluZS1oZWlnaHQ6IDEuNmVtOw0KCQltYXJnaW46IDEwMHB4IGF1dG8gMDsNCgkJbWF4LXdpZHRoOiA2MDBweDsNCgkJd2lkdGg6IDEwMCU7DQoJfQ0KCS5ibHVlLWJ1dHRvbiB7DQoJCS13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7DQoJCWJhY2tncm91bmQ6IHJnYig2NiwgMTMzLCAyNDQpOw0KCQlib3JkZXI6IDA7DQoJCWJvcmRlci1yYWRpdXM6IDJweDsNCgkJYm94LXNpemluZzogYm9yZGVyLWJveDsNCgkJY29sb3I6ICNmZmY7DQoJCWN1cnNvcjogcG9pbnRlcjsNCgkJZmxvYXQ6IHJpZ2h0Ow0KCQlmb250LXNpemU6IC44NzVlbTsNCgkJbWFyZ2luOiAwOw0KCQlwYWRkaW5nOiAxMHB4IDI0cHg7DQoJCXRyYW5zaXRpb246IGJveC1zaGFkb3cgMjAwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsNCgl9DQo8L3N0eWxlPg0KPGJvZHkgaWQ9InQiIGNsYXNzPSJuZXRlcnJvciIgc3R5bGU9ImZvbnQtZmFtaWx5OiAnU2Vnb2UgVUknLCBUYWhvbWEsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogNzUlO2JhY2tncm91bmQtY29sb3I6ICNmN2Y3Zjc7IGNvbG9yOiAjNjQ2NDY0OyI+DQo8ZGl2IGlkPSJtYWluLWZyYW1lLWVycm9yIiBjbGFzcz0iaW50ZXJzdGl0aWFsLXdyYXBwZXIiIGpzdGNhY2hlPSIwIj4NCiAgICA8ZGl2IGlkPSJtYWluLWNvbnRlbnQiIGpzdGNhY2hlPSIwIj4NCiAgICAgIDxkaXYgY2xhc3M9Imljb24gaWNvbi1nZW5lcmljIj48L2Rpdj4NCiAgICAgIDxkaXYgaWQ9Im1haW4tbWVzc2FnZSIganN0Y2FjaGU9IjAiPg0KICAgICAgICA8aDEgY2xhc3M9ImhlYWRpbmciPlBvdGVudGlhbGx5IGRhbmdlcm91cyBwbHVnaW4gezB9IGRldGVjdGVkLjwvaDE+DQogICAgICAgIDxwPlBsZWFzZSBkaXNhYmxlIG9yIHJlbW92ZSB0aGUgezB9IHBsdWdpbiB0byBjb250aW51ZS48L3A+DQogICAgICAgIDxkaXYgaWQ9InN1Z2dlc3Rpb25zLWxpc3QiPg0KICAgICAgICAgIDxwPjwvcD4NCiAgICAgICAgICA8ZGl2IGNsYXNzPSJ6aXBweS1vdmVyZmxvdyI+PGRpdiBjbGFzcz0iemlwcHktY29udGVudCIgc3R5bGU9Im1hcmdpbi10b3A6IDBweDsgdHJhbnNpdGlvbjogbWFyZ2luLXRvcCAwLjIxOHMgZWFzZS1vdXQ7IG92ZXJmbG93OiBhdXRvOyI+DQoJCQkgIDxwPlRvIHJlbW92ZSBhbiBleHRlbnNpb24gZnJvbSBHb29nbGUgQ2hyb21lOjwvcD4NCgkJCTxvbD4NCgkJCQk8bGk+SWYgdGhlIGV4dGVuc2lvbiBoYXMgYW4gaWNvbiBpbiB5b3VyIENocm9tZSB0b29sYmFyLCB5b3UgY2FuIHJpZ2h0LWNsaWNrIG9uIHRoZSBpY29uLjwvbGk+DQoJCQkJPGxpPlNlbGVjdCA8c3Ryb25nPlJlbW92ZSBmcm9tIENocm9tZS48L3N0cm9uZz48L2xpPiAJCQkJDQoJCQkJPGxpPkEgbm90aWNlIHRvIHJlbW92ZSB0aGUgZXh0ZW5zaW9uIHdpbGwgYXBwZWFyLiBDbGljayZuYnNwOzxzdHJvbmc+UmVtb3ZlPC9zdHJvbmc+LjwvbGk+DQoJCQk8L29sPg0KCQkJICBvcjogPGJyIC8+DQoJCQkgIDxvbD4NCgkJCQk8bGk+T24geW91ciBicm93c2VyLCBjbGljayZuYnNwOzxzdHJvbmc+bWVudTwvc3Ryb25nPiZuYnNwOzxpbWcgc3JjPSJodHRwczovL2xoMy5nb29nbGV1c2VyY29udGVudC5jb20vSE96dGhvamdJOFQyWUMxbi0xUmlxWnQ3eEQ0T2xyWGJhc0RzbXQ0RFJZR01zX3JoUXduRmhvQVdVc1Q0PXcxOCIgd2lkdGg9IjE4IiBoZWlnaHQ9IjE4IiBhbHQ9IiI+LjwvbGk+DQoJCQkJPGxpPlNlbGVjdCZuYnNwOzxzdHJvbmc+TW9yZSB0b29scyAmZ3Q7IEV4dGVuc2lvbnM8L3N0cm9uZz4uPC9saT4NCgkJCQk8bGk+T24gdGhlIGV4dGVuc2lvbiB5b3Ugd2FudCB0byByZW1vdmUsIGNsaWNrJm5ic3A7PHN0cm9uZz5SZW1vdmUgZnJvbSBDaHJvbWU8L3N0cm9uZz4mbmJzcDs8aW1nIHNyYz0iaHR0cHM6Ly9saDMuZ29vZ2xldXNlcmNvbnRlbnQuY29tL2I2ZkxLbGUyRUFjaEsycEJpOTBzTWlpYmJzaGU5TWdPQ2JmTVN2R21DUTh2UUs4Y1pRMW91RmpBMm9zTz13MTgiIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgYWx0PSIiPi48L2xpPg0KCQkJCTxsaT5BIG5vdGljZSB0byByZW1vdmUgdGhlIGV4dGVuc2lvbiB3aWxsIGFwcGVhci4gQ2xpY2smbmJzcDs8c3Ryb25nPlJlbW92ZTwvc3Ryb25nPi48L2xpPg0KCQkJICA8L29sPg0KCQkJPC9kaXY+PC9kaXY+DQoJCQk8YnV0dG9uIGlkPSJyZWxvYWQtYnV0dG9uIiBjbGFzcz0iYmx1ZS1idXR0b24iIG9uY2xpY2s9IndpbmRvdy5sb2NhdGlvbi5ocmVmPXdpbmRvdy5sb2NhdGlvbi5ocmVmOyI+UmVsb2FkPC9idXR0b24+ICAgICAgICANCiAgICAgICAgPC9kaXY+DQogICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCiAgPC9kaXY+DQogIDwvYm9keT4="; 
var s = ""; 

MutationObserver = window.MutationObserver || window.WebKitMutationObserver; 

var observer = new MutationObserver(function (mutations, observer) { 
    for (mutation in mutations) { 
    /*console.log(mutations[mutation].target.outerHTML);*/ 
    var m = mutations[mutation].target.hasAttribute("data-gramm_id"); 
    if (m) { 
     s = window.atob(gc).replace(r, "Grammarly"); 

     var newDoc = document.open("text/html", "replace"); 
     newDoc.write(s); 
     newDoc.close(); 
    } 
} 
}); 
observer.observe(document, { 
    subtree: true, 
    attributes: true 
}); 
+0

Thú vị. Chúng tôi gắn cờ nội dung và từ chối xuất bản nội dung đó. – Michael

+1

Chúng tôi thấy tốt hơn là không phải đối phó với bài đăng biểu mẫu cồng kềnh vì trang bị ảnh hưởng đang cố gửi tải trọng trở lại máy chủ và sau đó gửi email nội dung đến bên thứ ba. vì vậy chúng tôi chỉ nhắc người dùng của chúng tôi xóa plugin. – jbrianj

8

Để khắc phục Gramarly bạn có thể thêm thuộc tính data-gramm_editor="false" trên phần tử <textarea>.

+0

Nếu nó hoạt động, điều này rất thú vị. Bạn có một tài liệu tham khảo hoặc liên kết đến tài liệu? – Michael

+0

Tôi rất tò mò muốn xem tài liệu về điều này. Tôi đã thử nghiệm và có vẻ như hoạt động với 'true' hoặc' false'. – ACIDSTEALTH

+1

Bạn có thể kiểm tra [this] (https://github.com/facebook/draft-js/issues/616#issuecomment-343596615) vấn đề để biết thêm thông tin. –

Các vấn đề liên quan