0

WebViewを使用してHTMLエディターCKEditorをCocoaアプリに統合しています。

これまでのところ、1つのことを除いて、期待どおりに機能します。アプリの他の場所で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

私はココアとウェブビューについての経験がありません。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 に答える