jquery: Windows Google Chrome не вызывает событие в iframe - PullRequest
0 голосов
/ 25 июня 2010

Итак, я работаю над редактором WYSIWYG с уже настроенной грамматикой и т. Д. Мне было поручено добавить функции копирования и вставки для кросс-программы. У меня есть код, который работает в Google Chrome в Ubuntu, Firefox в Ubuntu и Windows, но не в Chrome для Windows.

Я отследил проблему до чего-то простого. Когда команда вставки отправляется (через событие Ctrl + V), я немедленно изменяю фокус на скрытый, contenteditable, iframe и запускаю событие там. Затем я подожду, пока он всплывет, а затем обработаю разбор и вставку.

this.pasteOperation = function(event, controller) {
     this._cutpastearea.getEditable().focus().trigger(event);
     setTimeout(function() { controller.clipboardControl().handlePaste(); }, 1);
},

(где getEditable получает спорный раздел iframe)

Теперь, если я открою iframe и отключу установленное время ожидания, я обнаружу, что фокус был получен, но ничего не вставлено. Если я продолжу вставлять его вручную, а затем вызываю функцию, все работает.

Так почему же это не вызывает событие?

Редактировать: поднял проблему в Chromium Issues . Кажется, это проблема только iframe.

1 Ответ

1 голос
/ 30 июня 2010

Нашли обходную работу.Вместо вызова триггера, вызовите это:

$.fn.forwardEvent = function(event) {
    this.each(function() {
        if (this.dispatchEvent) {
            if (event.originalEvent) {
                event = event.originalEvent
            }
            try {
                this.dispatchEvent(event);
            } catch(error) {
                $(this).trigger(event);
            }
        }
        else {
            $(this).trigger(event);
        }
    });
    return this;
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...