250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- button
- 개발자
- keyframes
- html5
- CSS
- hover
- IOS
- css3
- xcode
- 풀스택
- effect
- 백엔드
- front-end
- HTML
- 비전공자
- 애니메이션
- iPhone
- react
- 비전공 개발자
- MAC
- Animation
- image
- SWIFT
- ipad
- javascript
- 자바스크립트
- 프론트엔드
- php
- iOS 개발자
- jQuery
Archives
- Today
- Total
비전공자 개발일기
WKWebView Component 1(Alert Event, go Back, go Forward) 본문
728x90
SMALL
목적
웹 페이지 내 Javascript의 alert event를 iOS 기기에서도 동일하게 나타내기 위함
import UIKit
import WebKit
class ViewController: UIViewController, WKNavigationDelegate {
var webView: WKWebView!
override func loadView() {
let webConfiguration = WKWebViewConfiguration()
webView = WKWebView(frame: .zero, configuration: webConfiguration)
webView.navigationDelegate = self
webView.uiDelegate = self
webView.allowsBackForwardNavigationGestures = true
self.view = webView
}
override func viewDidLoad() {
super.viewDidLoad()
webViewSetting()
}
private func webViewSetting() {
webView.backgroundColor = UIColor(red: 34 / 255, green: 34 / 255, blue: 34 / 255, alpha: 1.0)
NSLayoutConstraint.activate([
webView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor),
webView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor),
webView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor),
webView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor)
])
if let url = URL(string: "URL") {
webView.load(URLRequest(url: url))
}
}
}
extension ViewController: WKUIDelegate {
func webView(_ webView: WKWebView, runJavaScriptAlertPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping () -> Void) {
if message.contains("tel") {
let alertController = UIAlertController(title: "Emergency", message: message, preferredStyle: .alert)
let cancelAction = UIAlertAction(title: "Okay", style: .cancel) {
_ in completionHandler()
}
alertController.addAction(cancelAction)
DispatchQueue.main.async {
self.present(alertController, animated: true)
}
} else {
print("message: \(message)")
}
}
}
뒤로가기, 앞으로 가기(다른 페이지로의 이동 기록이 있을 경우)
// 좌우 스와이프시, 이전 페이지 또는 이후 페이지로 이동할 수 있도록 허용(default: false)
webView.allowsBackForwardNavigationGestures = true
// 오버 스크롤 방지 코드(스크롤 팅귐 방지)
// ====== webview scroll bounce control ======
webView.scrollView.alwaysBounceVertical = false
webView.scrollView.bounces = false
// ====== webview scroll bounce control ======
728x90
LIST
'SWIFT' 카테고리의 다른 글
UIImagePickerControllerDelegate, UINavigationControllerDelegate (0) | 2023.03.02 |
---|---|
WKWebView Phone Call (0) | 2023.03.01 |
Device ID(UUID) (0) | 2023.02.26 |
Location Information in Background Mode(iOS - Swift) (0) | 2023.02.24 |
Dark Mode(Light Mode) 고정하기(무시하기) (0) | 2023.02.22 |