WebKit WebView粘贴:动态UTI失败

时间:2016-06-11 09:16:57

标签: objective-c macos cocoa webview

在OSX上从chrome复制URL并粘贴到可编辑的WebKit webview中时,不会粘贴任何内容。

我确认NSPasteboard上有项目,NSPasteboardItem有以下类型:

"dyn.ah62d4rv4gu8zs3pcnzme2641rf4guzdmsv0gn64uqm10c6xenv61a3k",
"dyn.ah62d4rv4gu8yc6durvwwaznwmuuha2pxsvw0e55bsmwca7d3sbwu",
"public.utf8-plain-text",
"dyn.ah62d4rv4gu8yg55wqzkgc65yqzvg82pwqvdg22p0r73fk8puqyuda8b1gy5xerwdgk2a",
"dyn.ah62d4rv4gu8yg55wqzkgc65yqzvg82pwqvdg22p0r73fk8puqyuda8b1gy5xerwdg3cu"

我知道这些是自动生成的并映射到WebURLsWithTitlesPboardType。

在执行从safari到webview的相同操作时,它可以工作,因为它只包含

"public.utf8-plain-text"

是否有更好的处理这些UTI的已知解决方法?

1 个答案:

答案 0 :(得分:0)

Webkit webviews似乎不支持动态UTI的粘贴操作。我通过在webview中拦截粘贴:在没有那些UTI的情况下重新创建粘贴板项目来解决它:doCommandBySelector:

- (void)cleanupPasteboard:(NSPasteboard *)pasteboard {
    NSMutableArray *newItems = [[NSMutableArray alloc] init];
    for (NSPasteboardItem *item in pasteboard.pasteboardItems) {
        NSPasteboardItem *newItem = [[NSPasteboardItem alloc] init];
        for (NSString *type in item.types) {
            if (![type hasPrefix:@"dyn"]) {
                [newItem setData:[item dataForType:type] forType:type];
            }
        }
        [newItems addObject:newItem];
    }
    [pasteboard clearContents];
    [pasteboard writeObjects:newItems];
}