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>
Другие вопросы по тегам