標籤:int java 包含 load 重寫 his 選中 apple 技術
- 1.選中工程,點擊右鍵,New File>在iOS下選中Othe>Empty,產生一個.js的指令檔,將代碼粘貼過去儲存;
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);
//// ViewController.swift// Swift_UIWebView//// Created by 周文春 on 16/3/1.// Copyright ? 2016年 周文春. All rights reserved.//import UIKitclass ViewController: UIViewController,UIWebViewDelegate { @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 } //webView代理方法,連結地址發生改變的時候調用 func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool{ //擷取連結的地址 let rurl = request.URL?.absoluteString //判斷連結的首碼,是都包含ios:,就相當於OC中的判斷網頁跳轉一樣 if (rurl!.hasPrefix("ios:")){ //判斷之後,因為js指令碼裡面連結是以@串連的location.href="ios:@signin_go"所以這裡我們將連結進行分割之後取到後面的signin_go方法,用來調用我們重寫OC中的方法 let method = rurl!.componentsSeparatedByString("@")[1] if method == "signin_go"{ signin_go() } return false } return true } //webView代理方法,網頁內容載入完成時調用 func webViewDidFinishLoad(webView: UIWebView){ /** 注入指令碼 */ //擷取我們名為app.js的指令碼路徑 let jsPath = NSBundle.mainBundle().pathForResource("app", ofType: "js") //擷取到指令碼中的內容 var jsString :String = try! String(contentsOfFile: jsPath!, encoding: 4) //將獲得的常值內容後面的\n替換為空白的字串 jsString = jsString.stringByReplacingOccurrencesOfString("\n", withString: "") //觸發指令碼 webView.stringByEvaluatingJavaScriptFromString(jsString as String) } func signin_go(){ NSLog("JS 調用了OC中的signin_go方法")// //通過以下方法可以獲得使用者名稱或者密碼等;// var userName = webView.stringByEvaluatingJavaScriptFromString("指令碼") } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. }}
- 3.點擊網頁中登入按鈕,會調用OC中的signin_go方法;
參考原著出現的錯誤
解決方案: 在前面加上try! ;
//擷取到指令碼中的內容 var jsString :String = try! String(contentsOfFile: jsPath!, encoding: 4)
- 2.encoding為0時,會提示以下錯誤資訊,原因是編碼格式錯誤;
2016-03-01 13:21:31.860 Swift_UIWebView[2292:905421] Incorrect NSStringEncoding value 0x0000 detected. Assuming NSASCIIStringEncoding. Will stop this compatiblity mapping behavior in the near future.
解決方案:將encoding值設定為4,設定UTF8的編碼格式即可;
參考:http://www.cnblogs.com/wuxian/p/4470634.html
Swift 實踐之UIWebView