CKEditor и NSColorPanel: загадка
Я интегрирую редактор HTML CKEditor в свое приложение Cocoa с помощью WebView.
Пока все работает, как и ожидалось, за исключением одного: если я открою NSColorPanel где-нибудь еще в приложении и выберу цвет, цвет выделения в CKEditor автоматически изменится!
Как это может случиться? Как NSColorPanel (окно Какао) взаимодействует с CKEditor (виджет HTML!)? И, наконец, как я могу предотвратить такое поведение?
Код
Я загружаю CKEditor путем создания подклассов WebView и переопределения initWithFrame:frameName:groupName
,
- (id) initWithFrame:(NSRect)frame frameName:(NSString *)frameName groupName:(NSString *)groupName {
if (self = [super initWithFrame:frame frameName:frameName groupName:groupName]) {
NSURL *baseURL = [[NSBundle bundleForClass:self.class] URLForResource:@"ckeditor" withExtension:nil];
[self.mainFrame loadHTMLString:kCKEditorTemplate baseURL:baseURL];
}
return self;
}
И NSColorPanel открывается так:
- (IBAction)menuColor:(id)sender {
[[NSColorPanel sharedColorPanel] orderFront:self];
}
Что я узнал до сих пор
Этот метод вызывается отправителем NSColorPanel и ведет себя подобно методу changeColor: в NSTextView.
Тем не менее, я попытался переопределить changeColor:
и это не называется.
- Когда цвет выделения изменяется через NSColorPanel, CKEditor добавляет
<font>
элемент вместо<span>
элемент (как это делает, когда цвет текста изменяется с помощью панели инструментов). Это означает, что цвет выделения не изменяется традиционными средствами (может быть, картон?). - То же самое происходит с NSFontPanel.
1 ответ
У меня нет никакого опыта в отношении какао и просмотра веб-страниц, я могу только думать об этом в отношении элемента управления ActiveX IE, поэтому я могу ошибаться.
Что, как говорится:
Если во вставленном коде используется шрифт вместо span, то я думаю, что это не CKEditor, а Webkit, который вставляет этот код.
Вы можете попытаться загрузить страницу, которая вместо экземпляра CKEditor имеет только редактируемый контент div, а затем выполнить тот же тест, чтобы убедиться, что это что-то сделано внутри webkit:
<div contentEditable=true>this is editable, select some text and open the nscolorpanel</div>