| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > JavaScript: Общие вопросы > pasteHTML в iframe в Opera |
| Автор: Atlete 8.1.2010, 10:38 | ||
| столкнулся с такой задачей как вставка произвольного HTML кода в iframe. Чтобы было сразу понятнее задача связанная с WYSIWYG-редактором. есть такой код:
Такой код работает во всех браузерах (проверял в ИЕ, Mozilla и Chrome) кроме Opera. Я знаю что способ вставки HTML кода есть. Все что на гуглил показывало аналогичный пример. Что я делаю не так? Помогите найти решение. |
| Автор: Amphiluke 8.1.2010, 11:28 | ||
Что-то как будто много лишнего…
|
| Автор: Atlete 8.1.2010, 12:05 |
| если сделать appendChild то HTML добавиться в конец. А суть в WYSIWYG редакторе добавлять именно там где стоит курсор. Так что указанный вами метод не подойдет. |
| Автор: Amphiluke 8.1.2010, 13:15 | ||||
Метод pasteHTML() понимает только IE. Opera — нет. Поэтому пересмотрите свою методику определения браузера. Opera будет нормально выполнять то, что что вы прописали для Gecko. Поэтому лучше сделать прооверку:
Добавлено через 10 минут и 56 секунд
|
| Автор: Atlete 8.1.2010, 13:28 | ||||
| к сожалению это не так. пробуем сделать так
результат undefined но если сделать так:
объект есть. Получается для ИЕ и Оперы надо использовать одинаковый метод. Но у обекта Range (CreateRange() ) в ИЕ гораздо больше методов, чем в Опере. Не хочется делать все через реплейсы...как то не интересно получается (((. |
| Автор: Amphiluke 8.1.2010, 13:34 | ||
Я привел вам рабочий код в предыдущем сообщении.
в Opera показывает что требуется. Никаких undefined. |
| Автор: Atlete 8.1.2010, 13:50 |
| Огромное спасибо. Верхний пост не видел. Вставляется HTML. |
| Автор: Amphiluke 8.1.2010, 13:51 |
| В вашем коде isGecko = false в случае Opera, и поэтому iframe определяется через коллекцию frames, как для IE, а не через getElementById. Но возвращаемый таким образом объект окна не имеет свойства contentWindow (оно возвращается как undefined), поэтому и метод getSelection() в этом случае у вас не определяется в Opera. Ой, не успел… =) |
| Автор: Atlete 8.1.2010, 14:06 |
| Я уже разобрался по Вашему коду. Большое спасибо за оказанную помощь еще раз. К сожалению не могу плюсануть - не хватает еще кол-в сообщений. |
| Автор: Frozen_Coyote 6.2.2011, 12:22 | ||
А не подскажете, как модифицировать код для Оперы, чтобы вставка происходила не в место, где курсор стоит, а замещая выделенный текст или объект? спасибо! |
| Автор: Amphiluke 6.2.2011, 16:19 |
| Для браузеров, кроме Opera, можно перед вставкой элемента вызывать метод deleteFromDocument() объекта Selection (а для IE — метод clear()). В Opera такой «фокус» не проходит. Для нее уже до нас придумали http://help.dottoro.com/ljdslife.php#example_1. Похоже, эти обходные пути уже тоже не работают... |
| Автор: Amphiluke 6.2.2011, 17:07 | ||
Придумал для Opera другой обходной путь. Довольно извращенный, но рабочий.
|