从finder拖放到WebView

Oli*_*ère 5 cocoa drag-and-drop webview

我在编辑模式下使用WebView.我已经从WebUIDelegate Procotol实现了这个方法:

- (void)webView:(WebView *)sender willPerformDragDestinationAction:(WebDragDestinationAction)action forDraggingInfo:(id < NSDraggingInfo >)draggingInfo
Run Code Online (Sandbox Code Playgroud)

并使用它来捕获我的WebView上的元素滴.当我检测到从我的应用程序外部拖动文件并包含图片时,我在此方法中构建了img DOM元素并将其添加到我的文档中.

这工作正常,但正如方法的名称所暗示的那样,我只被告知拖动会发生,我无法控制它.

由于Finder始终执行文件拖动操作,因此在编辑模式下在WebView上删除文件时通常会发生的事情是webview显示文件的路径.

我最终将文件路径字符串添加到我的webview和图像中,但我想阻止添加文本.

有没有办法在没有子类化webview的情况下配置它?

我尝试了它,当它工作时,它打破了许多其他的东西,如插入移动的插入等.

Oli*_*ère 10

自己回答这个改变!

- (BOOL)performDragOperation:(id <NSDraggingInfo>)sender
{

    if ([sender draggingSource] == nil)
    {

        NSPasteboard *pboard = [sender draggingPasteboard];

        if ( [[pboard types] containsObject:NSFilenamesPboardType] ) {
            NSURL* fileURL;
            fileURL=[NSURL URLFromPasteboard: [sender draggingPasteboard]];

            NSArray *dragTypes = [NSArray arrayWithObject:NSFileContentsPboardType];
            [[sender draggingPasteboard] declareTypes:dragTypes owner:nil];

            NSImage *content = [[NSImage alloc] initWithContentsOfURL:fileURL];
            [[sender draggingPasteboard] setData:[content TIFFRepresentation] forType:NSPasteboardTypeTIFF];
        }
    }

    return [super performDragOperation:sender];


}
Run Code Online (Sandbox Code Playgroud)

实际上,我所做的确实是继承WebView并拦截performDragOperation以更改拖动粘贴板的内容,如果拖动源位于我的应用程序之外并且不包含图像但只包含文件名.