1. 程式人生 > >[Swift通天遁地]一、超級工具-(6)通過JavaScript(指令碼)程式碼呼叫裝置的源生程式

[Swift通天遁地]一、超級工具-(6)通過JavaScript(指令碼)程式碼呼叫裝置的源生程式

本文將演示如何通過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 }