2012-09-22 75 views
0

我正在使用WebView將HTML編輯器CKEditor集成到我的Cocoa應用程序中。CKEditor和NSColorPanel:一個謎

到目前爲止,它的工作原理除了一件事:如果我在應用程序的其他地方打開NSColorPanel並選擇一種顏色,CKEditor中的選擇顏色會自動變化!

這是怎麼發生的? NSColorPanel(一個Cocoa窗口)如何與CKEditor(一個HTML小部件!)進行通信?最後,我該如何防止這種行爲?

代碼

我通過繼承的WebView和壓倒一切的initWithFrame:frameName:groupName加載CKEditor的。

- (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

回答

1

我沒有任何有關可可和webview的經驗,我只能試着想到這一點關於IE的ActiveX控件,所以我可能是錯的。

話雖這麼說:

如果插入的代碼使用的字體,而不是廣度,那麼我認爲這不是CKEditor的,但在WebKit的一個,它的插入代碼。

你可以嘗試加載,而不是CKEditor的情況下它只是編輯的div內容的頁面,然後進行相同的測試,以驗證它的東西,裏面的WebKit做:

<div contentEditable=true>this is editable, select some text and open the nscolorpanel</div> 
+0

+1點上!看起來CKEditor使用'contentEditable',這就是奇怪的行爲。 – hpique