После долгих споров я пришел к выводу, что использовать пользовательские onclicks i ckeditor невозможно. Вместо этого я разработал следующий обходной путь, так как я действительно заинтересован только в данных, возвращаемых из editor.getData(), чтобы быть правильным:
Вместо регистрации OnClick, как это в диалоговом
element.setAttribute('onclick' , 'window.location=\'' + this.getValue() + '\'');
Я создал атрибутов пользовательских данных для location.href
element.setAttribute('data-custom-click' , 'location.href=\'' + this.getValue() + '\'');
Затем в инициализации плагина, который создает кнопки и регистрирует упомянутый выше диалог, я зарегистрировал два обработчика событий
editor.on('getData', function(e) {
e.data.dataValue = e.data.dataValue.replace(' data-custom-click=', ' onclick=');
});
editor.on('setData', function(e) {
e.data.dataValue = e.data.dataValue.replace(' onclick=',' data-custom-click=');
});
getData
пожаров, в соответствии с документацией
до возвращения GetData вызова, что позволяет для дополнительных манипуляций.
setData
, с другой стороны, пожары
перед вызовом УстановитьДанные выполняется, что позволяет дополнительных манипуляций.
Таким образом, любой редактор этих обработчиков событий превратит OnClick для данных-обычая щелчок при загрузке HTML, что делает мои кнопки безопасности во время редактирования и преобразование данных любого обычая щелкните обратно OnClick, когда editor.getData (), давая мне рабочие кнопки для «реальной» страницы.
Это своего рода хак, но он работает =)
Вы пытались использовать element.addEventListener? обратитесь к http://stackoverflow.com/questions/6348494/addeventlistener-vs-onclick –
Увы, @ luis-periera, элемент параметра ссылается на элемент CKEditors [http://docs.ckeditor.com/#!/api/ CKEDITOR.dom.element], поэтому addEventListener не является функцией. Он имеет .on ('тип события', функция), но это дает то же поведение, что и исходное решение onclick –