如何创建从我的网站到UIWebView的JavascriptInterface通道?
Android中的示例:
webView.addJavascriptInterface(new WebAppInterface(this), "Android");
我想从这个JavascriptInterface绘制方法,例如:
func webViewDidStartLoad(webView: UIWebView)
要么
myActivityIndicator.startAnimating()
我能怎么做?
对于WKWebView:源在这里
的JavaScript
function callNativeApp () { try { webkit.messageHandlers.callbackHandler.postMessage("Hello from JavaScript"); } catch(err) { console.log('The native context does not exist yet'); } }
迅速
import WebKit class ViewController: UIViewController, WKScriptMessageHandler { @IBOutlet var containerView: UIView? = nil var webView: WKWebView? override func loadView() { super.loadView() let contentController = WKUserContentController() contentController.addScriptMessageHandler(self, name: "callbackHandler") let config = WKWebViewConfiguration() config.userContentController = contentController self.webView = WKWebView( frame: self.containerView!.bounds, configuration: config) self.view = self.webView } override func viewDidLoad() { super.viewDidLoad() //I use the file html in local let path = NSBundle.mainBundle().pathForResource("index", ofType: "html") let url = NSURL(fileURLWithPath: path!) let req = NSURLRequest(URL: url) self.webView!.loadRequest(req) } func userContentController(userContentController: WKUserContentController, didReceiveScriptMessage message: WKScriptMessage) {// edit: changed fun to func if (message.name == "callbackHandler"){ print("\(message.body)") } } }
对于UIWebView:此处来源
HTML中的JavaScript
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> <script> (function(){ $(window).load(function(){ $('.clickMe').on('click', function(){ window.location = "foobar://fizz?Hello_from_javaScript"; }); }); })(jQuery); </script>
import UIKit class ViewController: UIViewController, UIWebViewDelegate { @IBOutlet weak var Web: UIWebView! override func viewDidLoad() { super.viewDidLoad() let path = NSBundle.mainBundle().pathForResource("index", ofType: "html") let url = NSURL(fileURLWithPath: path!) let req = NSURLRequest(URL: url) Web.delegate = self Web.loadRequest(req) } func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool { if request.URL?.query != nil { print("\(request.URL!.query!)") } return true } }