簡體   English   中英

如何在應用內瀏覽器中打開我的iOS應用中點擊的任何URL?

[英]How to open any URL clicked within my iOS app in the in-app browser?

如何設置規則,以便當我的用戶點擊我的應用中的任何網絡鏈接時,它會在應用內瀏覽器而不是Safari中打開?

上下文 :我正在構建一個應用程序,其中有幾個地方鏈接由我嵌入或通過各種用戶交互加載,例如通向包含另一個鏈接的頁面的鏈接。 我想確保用戶很少離開我的應用程序,因此想要在已經開發的應用程序內瀏覽器中打開所有外部Web鏈接

目標構建:iOS 11.環境/語言:Swift 4

...它在應用內瀏覽器而不是Safari中打開?

在這種情況下,您需要自己的WebView。 這是控制器內部簡單webView的快速片段:

import UIKit
import WebKit

/// The controller for handling webviews.
class WebViewController: UIViewController {

    // MARK: - Properties
    internal lazy var button_Close: UIButton = {
        let button = UIButton(type: .custom)
        button.setImage(.close, for: .normal)
        button.imageEdgeInsets = UIEdgeInsets.init(top: 0, left: -30, bottom: 0, right: 0)
        button.addTarget(self, action: #selector(back(_:)), for: .touchUpInside)
        return button
    }()

    public var urlString: String! {
        didSet {
            if let url = URL(string: urlString) {
                let urlRequest = URLRequest(url:url)
                self.webView.load(urlRequest)
            }
        }
    }

    private lazy var webView: WKWebView = {
        let webView = WKWebView()
        webView.navigationDelegate = self
        return webView
    }()

    // MARK: - Functions
    // MARK: Overrides

    override func viewDidLoad() {
        super.viewDidLoad()

        let barButton = UIBarButtonItem(customView: self.button_Close)
        self.button_Close.frame = CGRect(x: 0, y: 0, width: 55.0, height: 44.0)
        let negativeSpacer = UIBarButtonItem(barButtonSystemItem: UIBarButtonItem.SystemItem.fixedSpace, target: nil, action: nil)
        if #available(iOS 11.0, *) {
            negativeSpacer.width = -30
        }
        self.navigationItem.leftBarButtonItems = [negativeSpacer, barButton]

        self.view.addSubview(self.webView)
        self.webView.snp.makeConstraints {
            $0.edges.equalToSuperview()
        }
    }

    @objc func back(_ sender: Any) {
        self.dismiss()
    }
}

extension WebViewController: WKNavigationDelegate {
    func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
        // Show here a HUD or any loader
    }

    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        // Dismiss your HUD
    }
}

並呈現這樣的webViewController,如此(傳遞URLString):

let webViewVC = WebViewController()
webViewVC.urlString = "https://www.glennvon.com/"
let navCon = UINavigationController(rootViewController: webViewVC)
self.navigationController?.present(navCon, animated: true, completion: nil)

如果您正在使用故事板,則只需在控制器中拖動webview並設置委托即可。 這應該可以幫到你:)

使用SFSafariViewController的簡單解決方案,該解決方案可在單獨的包中使用

import SafariServices

Swift 4,iOS 9.0+

let url = URL(string: "your URL here")
let vc = SFSafariViewController(url: url)
present(vc, animated: true)

如果您需要更多控制 - 使用配置參數( Swift 4,iOS 11.0+ ):

例:

let config = SFSafariViewController.Configuration()
config.entersReaderIfAvailable = true

let url = URL(string: "your URL here")
let vc = SFSafariViewController(url: url, configuration: config)
present(vc, animated: true)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM