我正在使用 WebView 在我的 Cocoa 应用程序中集成 HTML 编辑器CKEditor 。
到目前为止,它按预期工作,除了一件事:如果我在应用程序的其他任何地方打开一个NSColorPanel并选择一种颜色,CKEditor 中选择的颜色会自动改变!
这怎么可能发生?NSColorPanel(一个 Cocoa 窗口)如何与 CKEditor(一个 HTML 小部件!)通信?最后,我怎样才能防止这种行为?
代码
我通过子类化 WebView 和覆盖来加载 CKEditor 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];
}
到目前为止我发现了什么
- WebView类参考说 WebView 实现
changeColor:
:
此方法由 NSColorPanel 发送方调用,其行为类似于 NSTextView 中的 changeColor: 方法。
但是,我尝试覆盖changeColor:
它并没有被调用。
- 当通过 NSColorPanel 更改选择颜色时,CKEditor 添加一个
<font>
元素而不是一个<span>
元素(就像通过工具栏更改文本颜色时所做的那样)。这意味着选择颜色不会通过传统方式(可能是粘贴板?)改变。 - NSFontPanel 也会发生同样的事情。