【问题标题】:WebKit WebView paste: fails for dynamic UTIsWebKit WebView 粘贴:动态 UTI 失败
【发布时间】:2016-10-12 05:37:29
【问题描述】:

从 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 的已知解决方法?

【问题讨论】:

    标签: objective-c macos cocoa webview


    【解决方案1】:

    Webkit 网络视图似乎不支持动态 UTI 的粘贴操作。我通过在粘贴时重新创建没有这些 UTI 的粘贴板项目来解决它:在 webview: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];
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-29
      • 2020-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-08
      • 2019-04-13
      • 2014-02-20
      相关资源
      最近更新 更多