0

我正在使用 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 也会发生同样的事情。
4

1 回答 1

1

我对可可和 webview 没有任何经验,我只能尝试考虑 IE activeX 控件,所以我可能错了。

话虽如此:

如果插入的代码使用的是字体而不是跨度,那么我认为它不是 CKEditor 而是 Webkit 是它正在插入该代码的那个。

您可以尝试加载一个页面,而不是 CKEditor 实例,它只有一个内容可编辑的 div,然后执行相同的测试以验证它是否在 webkit 中完成:

<div contentEditable=true>this is editable, select some text and open the nscolorpanel</div>
于 2012-09-22T15:02:10.673 回答