์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- ๊ธฐ์ด๋ฌธ๋ฒ
- GCD
- concurrency
- duno
- algoritm
- URLSession
- HAVIT
- ๊ณ ๋์ kit
- dfs
- discardableResult
- SwiftUI
- ๋์ ๊ณํ๋ฒ
- Til
- ์ด์งํ์
- ํ๋ก๊ทธ๋๋จธ์ค
- SwiftUI ํํ ๋ฆฌ์ผ
- BFS
- SOPT
- APPJAM
- binarySearch
- SQL
- Swift
- ๋ค์ด๋๋ฏนํ๋ก๊ทธ๋๋ฐ
- SwiftUI Tutorials
- algorithm
- IOS
- 0์ด๋์ด์๋๊ธธ
- DynamicProgramming
- GroupBy
- ์ฐ์ํ์ค๋ถ๋ถ์์ด์ํฉ
- 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 ์ ๋ํด ๋ ์์ธํ ์๊ณ ์ถ๋ค๋ฌ ์๋ ํฌ์คํ ์ฐธ๊ณ !
[Swift iOS] WKNavigationDelegate ํ์ด๋ธ๋ฆฌ๋ ์ฑ์์ webview ํ์ ๋ฐ ๊ด๋ฆฌ
WKNavigationDelegate : Methods for accepting or rejecting navigation changes, and for tracking the progress of navigation requests. ์น๋ทฐ์์ ์ผ์ด๋๋ ๋ณ๊ฒฝ ์ฌํญ๋ค์ ๊ฐ์งํ๊ณ ์ ์ดํ ์ ์๋ ํ๋กํ ์ฝ...
hongssup.tistory.com
3. WKWebViewConfiguration : ์น ๋ทฐ ๊ตฌ์ฑ์ ๊ดํ ์ต์ ์ง์ ํ๊ธฐ
๐ฟ WKWebView์ ์์ ์ค์๋ configuration: WKWebViewConfiguration์ด๋ผ๋ ํ๋กํผํฐ๊ฐ ์๋๋ฐ์.
์ด ํ๋กํผํฐ๋ฅผ ํ์ฉํ๋ฉด ์น ๋ทฐ๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ ๋ณด๋ฅผ ์ปจํธ๋กคํ ์ ์์ต๋๋ค !
์ฆ, ์ฌ๋ฌ๊ฐ์ง ์ต์ ๊ฐ๋ค์ ์ฃผ์ด์ ์น์์ ์ ํ๋๋ ํญ๋ชฉ์ด๋ ์ด๋ฐ ๊ฐ์ ๋ํ ์ค์ ์ด ๊ฐ๋ฅํฉ๋๋ค.
( ์ ๊ฐ ์ฐพ์๋ณธ ์์๋ก๋,, ์น ํ์ด์ง ๋ ๋๋ง ์๋, ๋ฏธ๋์ด ์ฌ์ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ ๋ฑ์ด๋ผ๊ณ ํฉ๋๋น.. ? )
๋ํ WebView์ JavaScript ์ฝ๋๋ฅผ ์ฃผ์ ํ๊ฑฐ๋ JavaScript๋ก๋ถํฐ ๋ฉ์ธ์ง๋ฅผ ๋ฐ์์์ ์ปจํธ๋กคํ๋ ๊ฒ๋ ๊ฐ๋ฅํฉ๋๋ค.
์์ฑ ์ฑ ๊ธ๊ณ WKWebViewConfiguration์ WKWebView๊ฐ ์ฒ์ ์ด๊ธฐํ๋ ๋์๋ง ์ฌ์ฉ๋ฉ๋๋ค.
WKWebView๊ฐ ์์ฑ๋ ์ดํ์๋ ์ด ํด๋์ค๋ฅผ ํตํด ์์ฑ๋ค์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค ~~ !
์ ํ ๊ฐ๋ฐ์ ๋ฌธ์์์ ์ค์ ๊ฐ๋ฅํ ๊ธฐ๋ฅ๋ค๊ณผ ์ด๋ค ์ต์ ๋ค์ ์ฌ์ฉํ ์ ์๋์ง ์ค๋ช ๋์ด์๋ต๋๋ค !
Apple Developer Documentation
developer.apple.com
4. JavaScript ํต์ !!
๐ ์ค์ ๋ก ์น๋ทฐ๊ฐ ๋ง์ด ์๋ ์ฑ์ ๊ฒฝ์ฐ์ ์๋ฐ์คํฌ๋ฆฝํธ์ ํต์ ์ ํด์ผํฉ๋๋ค!
WKWebView์์ ์๋ฐ์คํฌ๋ฆฝํธ์ ์์ฒญ์ ์์ ํ ์ ์๊ณ , ์๋ฐ์คํฌ๋ฆฝํธ์ ํจ์๋ฅผ ํธ์ถํ ์ ์์ต๋๋ค.
[iOS SWIFT] WKWebview์์ WKUserContentContoller ๋ฅผ JavaScript ์ฐ๋ (Native <-> JavaScript) ํต์
PG์ฌ ๊ฒฐ์ ๋ฐ PASS๋ฅผ ํตํ ๋ณธ์ธ ์ธ์ฆ ํ ๋ Native iOS ์ฑ๊ณผ JavaScript ์ฐ๋์ด ํ์ํ๋ค. ์ด์ ๋ ๊ฒฐ์ ๋ฐ ๋ณธ์ธ ์ธ์ฆ์ ์ฑ๊ณต ์ฌ๋ถ ๋๋ ์คํจํ์ ๋ ์ฑ ์์ฒด์์ ๋์์ ํด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค. import WebKit //
blog.lovenfree.com
์ด ๋ธ๋ก๊ทธ๋ ์น๋ทฐ์์ ์๋ฐ์คํฌ๋ฆฝํธ ํต์ ์ ์ ์ฒด์ ์ผ๋ก ๋ณด์ฌ์ฃผ๋ ๊ฒ ๊ฐ์์ ๊ฐ์ ธ์๋ดค์ฉ๋๋น
์๋ฐ์คํฌ๋ฆฝํธ ํต์ ์ ์ ์ ๋ชจ๋ฅด๊ฒ ๊ณ ์ดํด์๋๋๋ฐ ์ผ๋จ......๊ฐ์ ธ์๊ณ ... ์ฐพ์๋ณด๋ค ๋ณด๋๊น ๊ธธ์ด์ก์ต๋๋ค ์ฟ์ฟ..
- ์ฐธ๊ณ ํ ์ฌ์ดํธ !!
[iOS] WKWebView (1) - ์น ๋ทฐ ์ฌ์ฉํ๊ธฐ
์ด๋ฒ์ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ์ด๋ฒ์ ์น ๋ทฐ๋ฅผ ์ฌ์ฉํด์ ํด์ผํ๋ ๊ฐ๋จํ ์์ ์ ๋ฐ์์ต๋๋ค :) ๊ทธ๋์ ์ด ์ฐธ์ WKWebView๋ ์์ฃผ ์ฌ์ฉํ๋ ์ปดํฌ๋ํธ์ด๊ธฐ๋ ํด์ ํ์คํ๊ฒ ๊ณต๋ถํด๋์ผ๋ฉด ๋์์ด ๋
dongminyoon.tistory.com
WKWebView
์ฐธ๊ณ ๋ด์ฉswift. WKWebView์ MessageHandler์ด์ฉํ๊ธฐApple Developer DocumentationiOS ์ฑ ๋ด์์ ์น์ ๋์ธ ์ ์๋ View๋์ ๊ฒฝ์ฐ์๋ ์น์ ๋ํ ๋๋ฉ์ธ ์ง์์ ๊ฐ์ง๊ณ ์์ง ์์ ๊ทธ๋์ ์ธ์ฃผ ๊ฒฝํ์ ํตํด iOS WebVie
velog.io
'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 |