【发布时间】:2011-09-26 00:00:33
【问题描述】:
我有一个 Cocoa Webview 子类,我需要将所有从它复制的文本都设为纯文本。我尝试过覆盖 -copy 和 -pasteboardTypesForSelection,但没有运气,调试代码似乎表明这些方法从未被调用。我还尝试在 css 中将 -webkit-user-modify 设置为 read-write-plaintext-only(这在这种情况下也可以使用),但这似乎没有效果。
有什么想法吗?
【问题讨论】:
我有一个 Cocoa Webview 子类,我需要将所有从它复制的文本都设为纯文本。我尝试过覆盖 -copy 和 -pasteboardTypesForSelection,但没有运气,调试代码似乎表明这些方法从未被调用。我还尝试在 css 中将 -webkit-user-modify 设置为 read-write-plaintext-only(这在这种情况下也可以使用),但这似乎没有效果。
有什么想法吗?
【问题讨论】:
好的,这似乎可行(将子类实例作为其自己的编辑委托):
- (BOOL)webView:(WebView *)webView doCommandBySelector:(SEL)command
{
if (command == @selector(copy:)) {
NSString *markup = [[self selectedDOMRange] markupString];
NSData *data = [markup dataUsingEncoding: NSUTF8StringEncoding];
NSNumber *n = [NSNumber numberWithUnsignedInteger: NSUTF8StringEncoding];
NSDictionary *options = [NSDictionary dictionaryWithObject:n forKey: NSCharacterEncodingDocumentOption];
NSAttributedString *as = [[NSAttributedString alloc] initWithHTML:data options:options documentAttributes: NULL];
NSString *selectedString = [as string];
[as autorelease];
NSPasteboard *pasteboard = [NSPasteboard generalPasteboard];
[pasteboard clearContents];
NSArray *objectsToCopy = [NSArray arrayWithObject: selectedString];
[pasteboard writeObjects:objectsToCopy];
return YES;
}
return NO;
}
不确定这是否是最好的方法。
【讨论】: