Мы недавно выпустили нашу переработанную версию ОМУ; Вы можете найти его в http://code.google.com/p/pagedown/.
Все, что является нестандартным в использовании переполнения стека, теперь происходит через перехваты плагинов, и это включает в себя загрузчик файлов. Таким образом, вы можете просто использовать тот же хук для реализации этого. Взгляните на документацию ; часть «подключения» сводится к следующему:
editor.hooks.set("insertImageDialog", function (callback) {
var dia = createMyDialog();
dia.find(".ok-button").click(function () {
var url = getChosenImageUrl();
removeMyDialog();
callback(url);
});
dia.find(".cancel-button").click(function () {
removeMyDialog();
callback(null);
});
return true; // tell the editor not to show the standard dialog
});
Что касается фактической загрузки, в настоящее время мы используем довольно уродливое решение, которое работает так:
- Фактическая форма загрузки файла имеет атрибут
target
со скрытым iframe, поэтому отправка формы не приводит к переходу на другую страницу.
- В глобальном объекте определена функция, которая удаляет диалог и вызывает обратный вызов. Это уродливая часть; этот метод совсем не чистый, но работает нормально.
- Действие контроллера загрузки возвращает минимальный HTML-документ с фрагментом кода JavaScript, который вызывает эту функцию (с помощью
window.parent
, поскольку нам нужно вырваться из iframe - обратите внимание, что для этого требуется, чтобы URL загрузки имел такой же origin как страница!) с адресом вновь созданного изображения.
Если вы собираетесь реализовать это аналогичным образом, взгляните на этот пост в Meta Stack Overflow относительно неприятной ошибки Chrome, которая может появиться, и обходного пути для нее.