Xcode 使用多个按钮浏览同一页面中的文件的WebView
我正在使用Swift和WebView开发OSX应用程序。 WebView包含两个用于浏览文件的HTML按钮:第一个按钮仅允许图像,而第二个按钮允许选择多个文件 问题是,我无法知道调用webview委托方法runOpenPanelForFileButtonWithResultListener时触发了哪个按钮 我想要这样的东西:Xcode 使用多个按钮浏览同一页面中的文件的WebView,xcode,swift,macos,uiwebview,Xcode,Swift,Macos,Uiwebview,我正在使用Swift和WebView开发OSX应用程序。 WebView包含两个用于浏览文件的HTML按钮:第一个按钮仅允许图像,而第二个按钮允许选择多个文件 问题是,我无法知道调用webview委托方法runOpenPanelForFileButtonWithResultListener时触发了哪个按钮 我想要这样的东西: func webView(sender: WebView!, runOpenPanelForFileButtonWithResultListener resultListe
func webView(sender: WebView!, runOpenPanelForFileButtonWithResultListener resultListener: WebOpenPanelResultListener!, allowMultipleFiles: Bool) {
let openDialog = NSOpenPanel()
if button1 {
openDialog.allowedFileTypes = [kUTTypeImage as String]
}
if button2 {
openDialog.allowsMultipleSelection = true
}
// Other stuffs
}
我最终找到了一种通过从Javascript调用Swift函数来实现这一点的方法。 解释此通信是如何工作的 当用户单击browse按钮时,我捕获事件并将按钮的名称从Javascript发送到WebView:
$(document).on('click', '#MyButtonName', function () {
if (navigator.userAgent === "MyWebView") {
webView.setClickedButton("MyButtonName");
}
});
然后在Swift中:
// Get Javascript key
func webView(webView: WebView!, didClearWindowObject windowObject: WebScriptObject!, forFrame frame: WebFrame!) {
windowObject.setValue(self, forKey: "webView")
}
// Call Swift selector
override class func webScriptNameForSelector(aSelector: Selector) -> String! {
if aSelector == "setClickedButton:" {
return "setClickedButton"
}
else {
return nil
}
}
// Allow selector
override class func isSelectorExcludedFromWebScript(aSelector: Selector) -> Bool {
return false
}
// Set the current clicked button from Javascript
func setClickedButton(btnName:String) {
self.htmlClickedButton = btnName
}
现在,我可以在我的委托方法中单击按钮:
if (self.htmlClickedButton == "MyButtonName") {
openDialog.allowedFileTypes = [kUTTypeImage as String]
}
我不确定这个解决方案是否可行,但它看起来并不是解决我的问题的最佳方法。
因此,我打开这个帖子,寻求更好的建议