gpt4 book ai didi

xcode - WebView 具有多个按钮以在同一页面中浏览文件

转载 作者:行者123 更新时间:2023-11-30 13:55:53 27 4
gpt4 key购买 nike

我正在使用 Swift 和 WebView 开发 OSX 应用程序。WebView 包含 2 个用于浏览文件的 HTML 按钮:第一个按钮仅允许图像,第二个按钮允许选择多个文件。

问题是我无法知道调用 webview 委托(delegate)方法 runOpenPanelForFileButtonWithResultListener 时触发了哪个按钮。

我想要这样的东西:

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 函数来实现此目的的方法。
This blog post解释了这种通信的工作原理。

当用户单击“浏览按钮”时,我捕获该事件并将按钮的名称从 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
}

现在我可以在我的委托(delegate)方法中获取单击的按钮:

if (self.htmlClickedButton == "MyButtonName") {
openDialog.allowedFileTypes = [kUTTypeImage as String]
}

我不确定这个解决方案,它有效,但看起来不是解决我的问题的最佳方法。
所以我打开这个帖子寻求更好的建议。

关于xcode - WebView 具有多个按钮以在同一页面中浏览文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33632289/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com