2016年12月27日 星期二

「iOS」Web View

Web View是讓APP可以造訪網頁,下載圖片,顯示地方等等功能的元件,

它就像是一個小小瀏覽器,也可以顯示圖片、GIF動畫,GOOGLE MAP等等。


Web View常用的方法如下:

loadRequest(request:NSURLResuest)  載入URL請求以顯示網頁

loadHTMLString(string:String!,baseURL:NSURL!) 載入網頁內容

loadData(file:NSData!,MIMEType:String!,textEncodingName:String!,baseURL:NSURL!)

reload()  重新載入

stropLoading() 停止載入

goBack() 在歷史紀錄中回到上一頁,如果沒有上一頁則不會有任何處理。

goForware() 在歷史紀錄中進到下一頁,如果沒有下一頁則不會有任何處理


以下是範例

載入Yahoo新聞 https://tw.news.yahoo.com/

先拉一個WebView元件出來,與程式碼建立連結

























這裡注意一件事,Storage必須選擇Strong,否則你會無法找到loadRequest之類的方法。

俺在這裡吃了一個晚上的悶虧。


程式碼如下:


  override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        
            let url = NSURL(string:"https://tw.news.yahoo.com/")
            let request = NSURLRequest(URL:url!)
            myWebView.loadRequest(request);
        
          }

執行結果











































接下來我試Load一個HTTP網站(沒有SSL認證)是不行的,一片空白,並出現警告訊息




爬文後發現:

在 iOS 9 之後,應用程式內的 UIWebView 預設為只能載入 https 的網頁

(也就是加密過的),如果是普通 http 的網頁會無法開啟。

如果要允許開啟HTTP網頁,需要額外設定。

(1)打開info.plist




















(2)空白處按右鍵 Add Row









































輸入NSAppTransportSecurity 後按下Enter


























然候點一下這一行,讓箭頭向下,再按右鍵Add Row





























輸入NSAllowsArbitraryLoads 後按下Enter,型別為Boolean,值為Yes






再重新Build一次程式就可以Run一般的網頁了。

程式碼如下,我們來開一下蕃薯藤網站,沒有HTTPS的入口網頁之一,也沒有RWD。


 @IBOutlet var myWebView: UIWebView!
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        
            let url = NSURL(string:"http://www.yam.com/")
            let request = NSURLRequest(URL:url!)
            myWebView.loadRequest(request);
        
          }
















































接下來示範另一個有用的功能,讀取HTML字串(或者稱為HTML原始碼)。

例如我有一個網頁的原始碼長這樣。


<html>
<head>
<title>Test Read HTML String</title>
</head>
<body>
<h1>test h1</h1><br><h2>test h2</h2>
</body>
</html>

我們用loadHTMLString方法來顯示這段程式碼

   @IBOutlet var myWebView: UIWebView!
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        
        let source:String = "<html><head><title>Test Read HTML String</title></head><body><h1>test h1</h1><br><h2>test h2</h2></body></html>"
              myWebView.loadHTMLString(source, baseURL: nil)
          }

執行畫面如下































參考資料:



網頁 UIWebView

沒有留言:

張貼留言