์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- ๋ค์ด๋๋ฏนํ๋ก๊ทธ๋๋ฐ
- SwiftUI
- binarySearch
- SQL
- Swift
- SwiftUI ํํ ๋ฆฌ์ผ
- ์ด์งํ์
- SwiftUI Tutorials
- ํ๋ก๊ทธ๋๋จธ์ค
- URLSession
- SOPT
- ๊ธฐ์ด๋ฌธ๋ฒ
- dfs
- duno
- GCD
- concurrency
- 0์ด๋์ด์๋๊ธธ
- algoritm
- algorithm
- Til
- discardableResult
- GroupBy
- ๋์ ๊ณํ๋ฒ
- HAVIT
- ์ฐ์ํ์ค๋ถ๋ถ์์ด์ํฉ
- APPJAM
- IOS
- BFS
- ๊ณ ๋์ kit
- DynamicProgramming
- Today
- Total
suvera-dev ๐ฅฆ
iOS) WKWebView ๋ณธ๋ฌธ
๐ก WKWebView๊ฐ ๋์จ ๋ฐฐ๊ฒฝ
iOS 8 ์๋ ๋ฒ์ ์์๋ UIWebView๋ฅผ ์ฌ์ฉํ์ง๋ง, ์ฑ๋ฅ์์ ๋ฌธ์ ๋ก deprecated ๋์๋ค๊ณ ํจ
iOS 8 ๋ถํฐ WKWebView๊ฐ ๋์ ๋์๊ณ , ์ด์ ๋ HTML์ ์ปจํ ์ธ ๋ฅผ ํ์ถํ๊ธฐ ์ํด์ ํ์ !
โ UIWebView์ ์ฐจ์ด๊ฐ ๋ชฌ๋ฐ??
์ด๋ ๊ฒ ๋ช ๊ฐ์ ์ฃผ์ ๋ก ๋น๊ต๊ฐ ๊ฐ๋ฅํ๋ฐ, ์ฑ๋ฅ ๋ฉด์์ WKWebView๊ฐ ์ฐ์ํด๋ณด์ด๋ค์ฉ !
๊ทธ๋ฆฌ๊ณ ์ ํ์์๋ ๋ ์ด์ ์ง์์ ์ํ๋ค๊ณ ํ๋, WKWebView๋ฅผ ์ฌ์ฉํด์ผํฉ๋๋ค.. ! ใ
๐๐ป ๋ ์์ธํ ์ค๋ช ํ์๋ฉด..
WKWebView๋ ์ฑ๊ณผ๋ ๋ณ๋ ํ๋ก์ธ์ค๋ก ์คํ๋ฉ๋๋ค !
์ฑ์ ๋ฉ์ธ ํ๋ก์ธ์ค์์ ์คํํ์ง ์๊ณ WKWebView์ ๋ณ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํด ๋ถ๋ฆฌํ๋ฏ๋ก
WKWebView ๊ฐ ์ค๋จ๋๋๋ผ๋ ์ฑ์ด ์ค๋จ ๋์ง ์์ต๋๋ค !! ์์
๋, ์น๋ทฐ์ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ด๊ณผํ๋ค๋ฉด ์ฑ์ ์ค๋จํ์ง ์๊ณ ์ถฉ๋ํ๊ฒ ๋์ด
ํ์ด์ง๋ฅผ ๋ค์ ๋ก๋ํ๋ ค๊ณ ์๋ํ๊ฒ ๋ฉ๋๋ค !
๊ตฌ๊ธ๋ง์ ํตํด ์์๋ณด๋ WKWebView๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋
๋ค์ดํฐ๋ธ ์ฑ์์ ์น๋ทฐ๋ฅผ ์ฑ์ UI์ฒ๋ผ ์ฌ์ฉํ๊ณ ์ถ์ ๋ ์ฌ์ฉํ ์ ์๊ณ
์ฌ๋ฌ ์ฝ๋ฐฑํจ์๋ค๋ก ์น์์์ ์ํ๋ค์ ๋ํ ์์ ์ ์์์ ์ปค์คํ ํ๊ธฐ๋ ์ฝ๋ค๊ณ ํฉ๋๋ค ๐
์ฆ, ์ฝ๊ฒ ๋งํด์ ์น์ ์์๋ฅผ ์ปค์คํ ํด์ ์ฌ์ฉํด์ผํ ๋
์ฌ๋ฌ๊ฐ์ง ๊ธฐ๋ฅ๋ค์ ์ง์ํ๋ ์ปดํฌ๋ํธ !
Web๊ณผ์ ์ฌ๋ฌ ์ํธ์์ฉ์ด ๊ฐ๋ฅํ๋ฐ, WKUserController๋ฅผ ์ฌ์ฉํด์
์น์ผ๋ก๋ถํฐ ๋ฉ์ธ์ง๋ฅผ ์ ๋ฌ๋ฐ์ ์๋ ์๊ณ , ์ฑ์์ ์น์ผ๋ก ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์ ๋ฌํ ์๋ ์์ต๋๋ค !
๋ํ, WKUIDelegate๋ฅผ ํ์ฉํด์ ์ฑ์์ ์น๋ทฐ๊ฐ Alert ๋ฉ์ธ์ง๋ฅผ ํธ์ถํ์๋, ์ฑ์์ ์ฒ๋ฆฌ๋ ๊ฐ๋ฅํฉ๋๋ค !
WKNavigationDelegate๋ฅผ ํ์ฉํด์๋ ์น๋ทฐ๊ฐ ํธ์ถ๋๋ ์์ ๋ค์ ์ ์ ์์ต๋๋ค.
( ๋ก๋ฉ์ ์๋ฃํ์๋ ํน์ ๋ก๋ฉ์ ์์ํ์ ๋ ๋ฑ์ ์ฒ๋ฆฌ )
๐ ๊ฐ๋จํ ์ฝ๋๋ก ์น๋ทฐ ๋์ฐ๋ ๋ฐฉ์ !!
import WebKit
class ViewController: UIViewController {
private lazy var webView: WKWebView = {
let webView = WKWebView(frame: self.view.frame)
webView.allowsBackForwardNavigationGestures = true
webView.uiDelegate = self
webView.navigationDelegate = self
return webView
}()
override func viewDidLoad() {
super.viewDidLoad()
loadWeb()
}
func loadWeb() {
self.view.addSubview(webView)
guard let url = URL(string: "https://apple.com") else { return }
let request = URLRequest(url: url)
webView.load(request)
}
}
extension ViewController: WKUIDelegate {}
extension ViewController: WKNavigationDelegate {}
์ด๋ ๊ฒ ์ค์ ํ๋ฉด ์น๋ทฐ์์ ํธ์ถํ๋ ๊ฒ๋ค์ delegate๋ก ์ ์ธํด์ ๋ฐ์์ ์ด๋ฒคํธ ํธ๋ค๋ง์ด ๊ฐ๋ฅํฉ๋๋ค !
์ฌํ๋ฆฌ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ค๋ก๊ฐ๊ธฐ, ๊ณต์ ํ๊ธฐ , url์ ์ ๋ ฅํ๋ ์ฐฝ๋ค์ด ์์ผ๋ฏ๋ก,
์ปค์คํ ํ์ฌ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ๋ฅํฉ๋๋ค !
์ฑ ์์์ ์น์ฌ์ดํธ๋ฅผ ํธ์ถํ๋ ๋์์ด ๊ฐ๋ฅํด์ง๋๋ฐ,
์น๊ณผ ์ฑ ์ฌ์ด์ ์ํธ์์ฉ์ ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋ ๋ฉ์๋ ๋ค์ด ๋ง๊ณ
์ด๋ฅผ ํ์ฉํ์ฌ ํธ๋ค๋งํ๊ธฐ๊ฐ ์ฝ๋ค๋ ์ ์ด ์์ต๋๋ค ! !
1. WKUIDelegate : UI ์์๋ค์ ๋ณด์ฌ์ฃผ๊ธฐ ์ํ ๋ฉ์๋
WKUIDelegate๋ ๋ง๊ทธ๋๋ก UI์์๋ค์ ๋ณด์ฌ์ฃผ๊ธฐ ์ํ ๋ฉ์๋์ ๋๋ค.
์๋ฅผ๋ค์ด, ์๋ก์ด ์น ๋ทฐ ์ฐฝ์ ๋ง๋๋ ๊ฒฝ์ฐ๋ alert๋ฅผ ๋ณด์ฌ์ค ๋ ์ฐ์ ๋๋ค! ์๋๋ ์ฃผ๋ก ์์ฃผ ์ฐ์ด๋ ๋ฉ์๋๋ค์ ๊ฐ์ ธ์ ๋ดค์ต๋๋น
// ์ ์ฐฝ์ด๊ธฐ
// ๊ฐ์ฅ ์์ฃผ ์ฌ์ฉํ๊ฒ ๋๋ ๊ธฐ๋ฅ์ธ๋ฐ,
func webView(_ webView: WKWebView,
createWebViewWith configuration: WKWebViewConfiguration,
for navigationAction: WKNavigationAction,
windowFeatures: WKWindowFeatures) -> WKWebView? {
//navigationAction๋ด์ ์๋ก ์์ฒญํ๋ webview์ ๋ํ ์ ๋ณด๊ฐ ๋ค์ด์๋ค.
//์๋์ ๊ฐ์ ํ์์ผ๋ก request๋ฅผ ๋ฐ์ ์ ์น๋ทฐ๋ฅผ ๋์ฐ๊ฑฐ๋ ๊ธฐ์กด ์น๋ทฐ์ load ํด์ค ์ ์๋ค.
if let url = navigationAction.request.url {
}
}
//Alert
func webView(_ webView: WKWebView,
runJavaScriptAlertPanelWithMessage message: String,
initiatedByFrame frame: WKFrameInfo,
completionHandler: @escaping () -> Void) {
//์๋ฐ์คํฌ๋ฆฝํธ์์ ํ์ํด์ฃผ๋ ๊ธฐ๋ณธ ์ผ๋ฟ์ ๋ํด์๋ ๋ณ๋ ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ์ด์ผํ๋ค.
//์ด๊ณณ์์ message๋ฅผ ํฌํจํ๋ UIAlertController๋ฅผ ์์ฑํด ์ฒ๋ฆฌํด์ฃผ๋ฉด ๋๋ค.
}
//Confirm
//Confirmd์ธ๋ฐ ์์ Alert ๋ฐฉ์์ผ๋ก completionHandler๋ฅผ ํธ์ถํด์ฃผ๋ฉด ๋๋ค.
func webView(_ webView: WKWebView,
runJavaScriptConfirmPanelWithMessage: String,
initiatedByFrame: WKFrameInfo,
completionHandler: (Bool) -> Void) {
}
2. WKNavigationDelegate : ์น ๋ทฐ์์ ์ผ์ด๋๋ ๋ณ๊ฒฝ์ฌํญ๋ค์
๊ฐ์งํ๊ณ ์ ์ดํ ์ ์๋ ํ๋กํ ์ฝ
WKWebView์์ ์ง์ํ๋ ๊ธฐ๋ฅ์ ์น์์ ํ ํ์ด์ง๋ฅผ ๋ก๋ํ๋ ๊ฒ ๋ฟ๋ง ์๋๋ผ, ์ ๋ง ์น์ ์ฌ์ฉํ๋ ๊ฒ์ฒ๋ผ ์์ผ๋ก ๊ฐ๊ธฐ, ๋ค๋ก๊ฐ๊ธฐ๋ ์ง์๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ WKNavigationDelegtae๋ฅผ ์ฑํํด์ ์น๋ทฐ์ ๋ก๋ ์์ ๋ค์ ๋ํ ์ฝ๋ฐฑ์ ๋ฐ์ ์ ์์ต๋๋ค !
๐ ์์ฃผ ์ฌ์ฉํ๋ ๋ฉ์๋๋ค
webView(_:decidePolicyFor:descisionHandler:) ์น ํ์ด์ง์ ํ์ ํ์ฉ ์ฌ๋ถ๋ฅผ ๊ฒฐ์
webView(_:didStartProvisionNavigation:) ์น๋ทฐ๊ฐ ์ฝํ ์ธ ํ์์ ์์ํ ๋ ํธ์ถ
webView(:didCommit:) ์น๋ทฐ๊ฐ ์ฝํ ์ธ ๋ฅผ ๋ฐ๊ธฐ ์์ํ ๋ ํธ์ถ
webView(_:didFinish:) ์น๋ทฐ๊ฐ ์ฝํ ์ธ ๋ฐ๊ธฐ๋ฅผ ์๋ฃํ์ ๋ ํธ์ถ
webView(_:didFail:withError:) ์น ๋ทฐ๊ฐ ์ฝํ ์ธ ๋ฅผ ๋ฐ๊ธฐ ์คํจํ์ ๋ ํธ์ถ
๐ฅ WKNavigationDelegate ์ ๋ํด ๋ ์์ธํ ์๊ณ ์ถ๋ค๋ฌ ์๋ ํฌ์คํ ์ฐธ๊ณ !
3. WKWebViewConfiguration : ์น ๋ทฐ ๊ตฌ์ฑ์ ๊ดํ ์ต์ ์ง์ ํ๊ธฐ
๐ฟ WKWebView์ ์์ ์ค์๋ configuration: WKWebViewConfiguration์ด๋ผ๋ ํ๋กํผํฐ๊ฐ ์๋๋ฐ์.
์ด ํ๋กํผํฐ๋ฅผ ํ์ฉํ๋ฉด ์น ๋ทฐ๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ ๋ณด๋ฅผ ์ปจํธ๋กคํ ์ ์์ต๋๋ค !
์ฆ, ์ฌ๋ฌ๊ฐ์ง ์ต์ ๊ฐ๋ค์ ์ฃผ์ด์ ์น์์ ์ ํ๋๋ ํญ๋ชฉ์ด๋ ์ด๋ฐ ๊ฐ์ ๋ํ ์ค์ ์ด ๊ฐ๋ฅํฉ๋๋ค.
( ์ ๊ฐ ์ฐพ์๋ณธ ์์๋ก๋,, ์น ํ์ด์ง ๋ ๋๋ง ์๋, ๋ฏธ๋์ด ์ฌ์ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ ๋ฑ์ด๋ผ๊ณ ํฉ๋๋น.. ? )
๋ํ WebView์ JavaScript ์ฝ๋๋ฅผ ์ฃผ์ ํ๊ฑฐ๋ JavaScript๋ก๋ถํฐ ๋ฉ์ธ์ง๋ฅผ ๋ฐ์์์ ์ปจํธ๋กคํ๋ ๊ฒ๋ ๊ฐ๋ฅํฉ๋๋ค.
์์ฑ ์ฑ ๊ธ๊ณ WKWebViewConfiguration์ WKWebView๊ฐ ์ฒ์ ์ด๊ธฐํ๋ ๋์๋ง ์ฌ์ฉ๋ฉ๋๋ค.
WKWebView๊ฐ ์์ฑ๋ ์ดํ์๋ ์ด ํด๋์ค๋ฅผ ํตํด ์์ฑ๋ค์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค ~~ !
์ ํ ๊ฐ๋ฐ์ ๋ฌธ์์์ ์ค์ ๊ฐ๋ฅํ ๊ธฐ๋ฅ๋ค๊ณผ ์ด๋ค ์ต์ ๋ค์ ์ฌ์ฉํ ์ ์๋์ง ์ค๋ช ๋์ด์๋ต๋๋ค !
4. JavaScript ํต์ !!
๐ ์ค์ ๋ก ์น๋ทฐ๊ฐ ๋ง์ด ์๋ ์ฑ์ ๊ฒฝ์ฐ์ ์๋ฐ์คํฌ๋ฆฝํธ์ ํต์ ์ ํด์ผํฉ๋๋ค!
WKWebView์์ ์๋ฐ์คํฌ๋ฆฝํธ์ ์์ฒญ์ ์์ ํ ์ ์๊ณ , ์๋ฐ์คํฌ๋ฆฝํธ์ ํจ์๋ฅผ ํธ์ถํ ์ ์์ต๋๋ค.
์ด ๋ธ๋ก๊ทธ๋ ์น๋ทฐ์์ ์๋ฐ์คํฌ๋ฆฝํธ ํต์ ์ ์ ์ฒด์ ์ผ๋ก ๋ณด์ฌ์ฃผ๋ ๊ฒ ๊ฐ์์ ๊ฐ์ ธ์๋ดค์ฉ๋๋น
์๋ฐ์คํฌ๋ฆฝํธ ํต์ ์ ์ ์ ๋ชจ๋ฅด๊ฒ ๊ณ ์ดํด์๋๋๋ฐ ์ผ๋จ......๊ฐ์ ธ์๊ณ ... ์ฐพ์๋ณด๋ค ๋ณด๋๊น ๊ธธ์ด์ก์ต๋๋ค ์ฟ์ฟ..
- ์ฐธ๊ณ ํ ์ฌ์ดํธ !!
'iOS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
iOS) Router pattern with Alamofireโs URLRequestConvertible protocol Tutorial ๋ฐ๋ผํด๋ณด๊ธฐ ! (7) | 2022.05.16 |
---|---|
iOS) Compositional Layout (2) | 2022.05.09 |
iOS) Modal dismissํ ํ CollectionView reload ํ๊ธฐ (0) | 2022.03.28 |
iOS ) URLSession ์์๋ณด๊ธฐ (2) | 2022.02.28 |
iOS ) GCD ์ฌ์ฉ์ ์ฃผ์ํด์ผํ ์ฌํญ (0) | 2022.02.06 |