實現原理:
1.通過UIWebView的stringByEvaluatingJavaScriptFromString方法來觸發腳本
2.通過自定義連接來觸發oc代碼
實現過程
@IBOutlet weak var webView: UIWebView! override func viewDidLoad() { super.viewDidLoad() webView.loadRequest(NSURLRequest(URL: NSURL(string: "http://passport.cnblogs.com/user/signin")!)) webView.delegate=self } //連接改變時 func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool{ var rurl = request.URL?.absoluteString if (rurl!.hasPrefix("ios:")){ var method = rurl!.componentsSeparatedByString("@")[1] if method == "signin_go"{ signin_go() } return false } return true } //加載完成時 func webViewDidFinishLoad(webView: UIWebView){ //注入腳本,這個腳本把登錄方法js重寫為連接 var jsPath = NSBundle.mainBundle().pathForResource("app", ofType: "js") var jsContent:NSString = NSString (contentsOfFile: jsPath!, encoding: 0, error: nil)! jsContent=jsContent.stringByReplacingOccurrencesOfString("\n", withString: "") webView.stringByEvaluatingJavaScriptFromString(jsContent as String) } func signin_go(){ NSLog("-我執行了signin_go-") }
var script = document.createElement('script'); script.type = 'text/javascript'; script.text = ' function signin_go(){ location.href="ios:@signin_go"; } '; document.getElementsByTagName('head')[0].appendChild(script);