我正在开发一个Mac应用程序,只是一个封装在WKWebView中的简单Web应用程序。
以下是我尝试上传名称中包含特殊字符的文件时的代码:
-(void)webView:(WKWebView *)webView runOpenPanelWithParameters:(WKOpenPanelParameters *)parameters initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(NSArray<NSURL *> * _Nullable))completionHandler
{
DEBUG_FUNC(@"");
NSOpenPanel* openDlg = [NSOpenPanel openPanel];
[openDlg setCanChooseFiles:YES];
[openDlg setCanChooseDirectories:NO];
[openDlg setPrompt:NSLocalizedString(@"Choose", nil)];
openDlg.allowsMultipleSelection = YES;
if ( [openDlg runModal] == NSOKButton )
{
if (completionHandler)
{
completionHandler([openDlg URLs]);
}
}
}
当我使用WebView时,这种方式可以工作,因此它不应该是Web问题。
但由于该项目使用了WKWebView, 例如:通过WKWebView上传后,文件“证书.p12”将更改为“è¯ä¹| .p12”。有谁知道如何解决它? 谢谢!
我已将此问题发布到https://bugs.webkit.org所以这是WebKit开发人员确认的WebKit错误,请参阅https://bugs.webkit.org/show_bug.cgi?id=172849中的更多内容
你的代码中存在一些小缺陷(就像你在取消后没有调用处理程序一样),它也已经过时了......
- (void)webView:(WKWebView *)webView runOpenPanelWithParameters:(WKOpenPanelParameters *)parameters initiatedByFrame:(WKFrameInfo *)frame completionHandler:(nonnull void (^)(NSArray<NSURL *> * _Nullable))completionHandler{
NSOpenPanel * openDialog = [NSOpenPanel openPanel];
[openDialog setCanChooseFiles:YES];
[openDialog setCanChooseDirectories:NO];
openDialog.allowsMultipleSelection = NO;
[openDialog beginSheetModalForWindow:self.view.window completionHandler:^(NSModalResponse result) {
if (result == NSModalResponseOK) {
completionHandler([openDialog URLs]);
} else {
completionHandler(nil);
}
}];
}