Принудительное копирование открытого текста из Cocoa WebView - PullRequest
3 голосов
/ 24 сентября 2011

У меня есть подкласс Cocoa Webview, и мне нужно, чтобы весь текст, скопированный с него, был только открытым текстом.Я попытался переопределить -copy и -pasteboardTypesForSelection, но не повезло, и отладочный код, похоже, указывает на то, что эти методы никогда не вызываются.Я также попытался установить -webkit-user-modify для чтения-записи-открытого текста только в css (это также будет работать в этой ситуации), но это, похоже, не дало результата.

Есть идеи?

1 Ответ

2 голосов
/ 25 сентября 2011

Хорошо, похоже, это работает (с экземпляром подкласса в качестве собственного делегата редактирования):

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

Не уверен, что это лучший способ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...