WebView内のJavaScript から Swiftの関数を呼ぶ

JavaScript から Swiftの関数を呼ぶ

Cocoa WebViewの話です。
iOSの話じゃないと思います。

ViewController.swift

import Cocoa
import WebKit

class ViewController: NSViewController {

     // cocoa WebViewをアウトレットしておく
    @IBOutlet weak var toWeb: WebView!

     // 同じパスにあるindex.htmlをロード
    var targetURL = NSBundle.mainBundle().pathForResource("index", ofType: "html");

    override func viewDidLoad() {
        super.viewDidLoad()

        let url = NSURL(string: targetURL!)
        let request = NSURLRequest(URL: url!)
        self.toWeb.mainFrame.loadRequest(request)

        var win = toWeb.windowScriptObject
        win.setValue(self, forKey: "ViewController")
    }

    // Sample function with multiple parameters
    func multiplyTwoFloat(x: Float, y: Float) -> Float {
        return x * y
    }

    // Sample function with single parameters
    func printFloat(f: Float) -> Void{
        print("\(f)")
    }

    // JSからアクセス可能にする関数を定義する
    override class func isSelectorExcludedFromWebScript(aSelector: Selector) -> Bool {
        switch aSelector {
        case Selector("multiplyTwoFloat:y:"):
            return false
        case Selector("printFloat:"):
            return false
        default:
            return true
        }
    }
}

index.html

<!DOCTYPE html>
<html>
<body>
<script>
    var swift = window.ViewController;
    var num = swift.multiplyTwoFloat_y_(2,2);
    swift.printFloat_(num); // -> 4.0 とログに表示される
</script>
</body>
</html>
original: qiita