2015-11-10 47 views
0

我正在使用Swift和WebView的OSX應用程序。 WebView包含2個用於瀏覽文件的HTML按鈕:第一個只允許在第二個允許多個文件選擇的情況下使用圖像。WebView與多個按鈕瀏覽同一頁面中的文件

問題是我無法知道調用webview委託方法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 
} 

回答

0

我終於找到了一種通過從JavaScript調用一個函數斯威夫特來實現這一點。
This blog post解釋了這種溝通的工作原理。

當用戶點擊「瀏覽按鈕」,我趕上該事件並從Javascript發送按鈕的名稱到的WebView:斯威夫特然後

$(document).on('click', '#MyButtonName', function() { 
    if (navigator.userAgent === "MyWebView") { 
     webView.setClickedButton("MyButtonName"); 
    } 
}); 

// 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] 
} 

我不知道這個解決方案,它」但它看起來並不是實現我的問題的最佳方式。
所以我讓這個線程打開任何更好的建議。

相關問題