★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公衆號:山青詠芝(shanqingyongzhi)
➤博客園地址:山青詠芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:http://www.javashuo.com/article/p-qthzbijc-ex.html
➤若是連接不是山青詠芝的博客園地址,則多是爬取做者的文章。
➤原文已修改更新!強烈建議點擊原文地址閱讀!支持做者!支持原創!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★html
目錄:[Swift]通天遁地Swiftios
本文將演示如何經過JavaScript(腳本)代碼調用設備的源生程序。git
在項目文件夾【DemoApp】上點擊鼠標右鍵,彈出右鍵菜單。github
【New File】->【Blank】空白模板->【next】web
->【Save As】:GetDeviceInfo.html->【Create】swift
在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】微信
如今開始編寫代碼,經過網頁視圖加載剛剛建立的網頁文件,並監聽網頁視圖的加載動做。ide
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 }