Мне нужно иметь возможность интегрировать tinyMCE с SignalR, чтобы люди могли видеть изменения редактора в реальном времени. Это работает достаточно хорошо в части ввода данных (браузер -> контроллер) в Firefox, Opera, Chrome, et c., Но на принимающей стороне, кажется, только Chrome последовательно получает сообщение. Другие браузеры не часто получают изменения в TinyMCE. У меня есть другой набор функций SignalR для обычных диалогов, и они прекрасно работают во всех браузерах, проблема только в TinyMCE.
По сути, PublishMessage, похоже, не срабатывает, за исключением Chrome. Я даже пытался использовать приватный браузер в FF.
Обратите внимание, что у меня есть селектор "textarea", поскольку может быть несколько областей редактирования, и имя соответствующей области отправляется через triggerElement.
Я последовал другому примеру ( 1 ).
$(function () {
// get handle to chat hub generated by SignalR
let tinyMCEHub = $.connection.tinyMCEHub;
tinyMCE.init({
selector: "textarea",
plugins: ['autoresize advlist autolink link lists charmap print preview hr anchor pagebreak spellchecker', 'searchreplace wordcount visualblocks visualchars code fullscreen insertdatetime nonbreaking', 'save table directionality emoticons template paste '],
menubar: true,
toolbar: ' fontselect fontsizeselect bold italic underline forecolor| alignleft alignright alignjustify | bullist numlist outdent indent ',
height: "20vh",
browser_spellcheck: true,
fontsize_formats: '8pt 10pt 12pt 14pt 18pt 24pt 36pt',
font_formats: 'Arial=arial,helvetica,sans-serif;Courier New=courier new,courier,monospace;Times New Roman=times new roman,times;Symbol=symbol',
init_instance_callback: function (editor) {
editor.on('input', function (e) {
unsaved = true;
});
},
setup: function (ed) {
tinyMCEHub.client.PublishMessage = function (message, sessID, triggerElement) {
let sessionID = $("#sessionId").val();
if (sessionID != sessID) {
let publishEditor = tinyMCE.get(triggerElement);
let bookmark = publishEditor.selection.getBookmark(2, true);
tinyMCE.get(triggerElement).setContent(message);
publishEditor.selection.moveToBookmark(bookmark);
}
};
$.connection.hub.start().done(function () {
ed.on('keyup', function (e) {
var text = tinyMCE.activeEditor.getContent();
let sessionID = $("#sessionId").val();
let triggerElement = ed.id;
tinyMCEHub.server.send(text, sessionID, triggerElement);
});
});
}
});
});