[Swift通天遁地]一、超級工具-(6)通過JavaScript(指令碼)程式碼呼叫裝置的源生程式
阿新 • • 發佈:2018-12-19
本文將演示如何通過JavaScript(指令碼)程式碼呼叫裝置的源生程式。
在專案資料夾【DemoApp】上點選滑鼠右鍵,彈出右鍵選單。
【New File】->【Blank】空白模板->【next】
->【Save As】:GetDeviceInfo.html->【Create】
在GetDeviceInfo.html中輸入網頁程式碼:
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type"content="text/html; charset=UTF-8"> 5 <title>getDeviceInfo</title> 6 <script> 7 function getDeviceInfo() 8 { 9 document.location = "callios:getDeviceInfo" 10 } 11 </script> 12 </head> 13<body style="background-color:#ff7e00"> 14 <input type="button" value="Get device information" onClick="getDeviceInfo()" style="width:305px;height:50px;font-size:20px;"/> 15 </body> 16 </html>
在專案導航區,開啟檢視控制器的程式碼檔案【ViewController.swift】
現在開始編寫程式碼,通過網頁檢視載入剛剛建立的網頁檔案,並監聽網頁檢視的載入動作。
1 import UIKit 2 3 //新增一個網頁檢視的代理協議UIWebViewDelegate 4 //通過該協議中的方法,可以對網頁檢視的載入動作進行監聽 5 class ViewController: UIViewController, UIWebViewDelegate { 6 7 //新增一個網頁檢視物件,作為當前類的屬性 8 var webView:UIWebView! 9 override func viewDidLoad() { 10 super.viewDidLoad() 11 // Do any additional setup after loading the view, typically from a nib. 12 13 //獲得當前裝置的螢幕尺寸資訊 14 let bounds = UIScreen.main.bounds 15 //通過螢幕尺寸資訊建立一個矩形的顯示區域 16 let frame = CGRect(x: 0, y: 60, width: bounds.width, height: bounds.height-60) 17 18 //初始化一個網頁檢視物件,並以矩形區域作為其顯示區域 19 webView = UIWebView(frame: frame) 20 //設定網頁檢視的代理物件, 21 //該代理物件是當前的檢視控制器物件 22 webView.delegate = self 23 //設定網頁檢視的背景顏色為無色 24 webView.backgroundColor = UIColor.clear 25 26 //設定根檢視的背景顏色為橙色 27 self.view.backgroundColor = UIColor.orange 28 //將網頁檢視新增到根檢視中 29 self.view.addSubview(webView) 30 31 //獲得網頁檔案在專案中的路徑 32 let path = Bundle.main.path(forResource: "GetDeviceInfo", ofType: "html") 33 //並將路徑轉換成網址的樣式 34 let url = URL(string: path!) 35 //通過網頁檢視的載入請求方法,載入該網址路徑下的網頁檔案 36 webView.loadRequest(NSURLRequest(url: url!) as URLRequest) 37 } 38 39 //新增一個代理方法,用來監聽網頁檢視的載入動作, 40 //當網頁檢視即將開始載入動作時,呼叫此方法。 41 func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool 42 { 43 //獲得網頁檢視即將載入的我那個隻字符串 44 let url = request.url?.absoluteString 45 //將網址以冒號進行分割,並生成一個包含兩個字串的陣列 46 let components = url?.components(separatedBy: ":") 47 //獲得陣列中的第一個元素 48 let firstElement = components?[0] 49 50 //如果陣列中的第一個元素,和在網頁中編寫的指令碼一致,則執行之後的程式碼 51 if (components?.count)! > 1 && firstElement! == "callios" 52 { 53 //獲得當前裝置的模型資訊 54 let model = UIDevice.current.model 55 //獲得當前裝置的作業系統的名稱 56 let systemName = UIDevice.current.systemName 57 //獲得當前裝置的作業系統的版本號 58 let systemVersion = UIDevice.current.systemVersion 59 60 //將以上獲得的資訊拼接成一個字串常量 61 let message = "Device model:"+model+"\\nSystem name:"+systemName+"\\nSystem version:"+systemVersion 62 //呼叫指令碼的警告語句,在網頁中開啟警告視窗,並顯示裝置的屬性資訊 63 webView.stringByEvaluatingJavaScript(from: "alert('" + message + "')") 64 //最後返回false,使3網頁檢視中止載入的動作。 65 return false 66 } 67 68 //當網址檢視載入的網址,不是我們自定義的網址時,則返回真,以繼續網頁檢視的載入動作。 69 return true 70 } 71 72 override func didReceiveMemoryWarning() { 73 super.didReceiveMemoryWarning() 74 // Dispose of any resources that can be recreated. 75 } 76 }