Problem
WebViewにロードしたjavascriptから、ViewControllerのfunctionを呼び出したい
Solution
サンプルコード
- サンプルコードで使用しているライブラリ
- SwiftFilePath: NSFileManagerのWrapperなので、必要ではない
WebViewEvent.js
open("native://anchorClicked?anchorUrl=" + anchorUrl)
WebViewController.swift
class WebViewController: UIViewController, UIWebViewDelegate {
@IBOutlet weak var webView: UIWebView!
...(省略)...
func getJavascriptString() -> String {
let path = NSBundle.mainBundle().pathForResource("WebViewEvent", ofType: "js")!
return Path(path).readString()!
}
func webViewDidFinishLoad(webView: UIWebView) {
self.webView.stringByEvaluatingJavaScriptFromString(getJavascriptString())
}
func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
var url = request.URL!.standardizedURL
if (url?.scheme == "native") {
if url?.host == "anchorClicked" {
let queryStrings = getQueryStrings(url!.query)
anchorClicked(queryString)
}
}
}
func anchorClicked(queryString: [String: String]) {
println(queryString["anchorUrl"])
}
func getQueryStrings(query: String?) -> [String: String] {
var queryStrings = [String: String]()
if let query = query {
for qs in query.componentsSeparatedByString("&") {
// Get the parameter name
let key = qs.componentsSeparatedByString("=")[0]
// Get the parameter value
var value = qs.componentsSeparatedByString("=")[1]
value = value.stringByReplacingOccurrencesOfString("+", withString: " ")
value = value.stringByReplacingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!
queryStrings[key] = value
}
}
return queryStrings
}
}