【问题标题】:How to open url programmatically but not open in browser swift如何以编程方式打开 url 但不能在浏览器中快速打开
【发布时间】:2017-01-19 06:32:36
【问题描述】:

当用户单击cell 时,我需要以编程方式打开url,但不需要转至Safari browser。需要现场统计。

这个需要模仿post request

我愿意:

UIApplication.shared.openURL(URL(string: url)!)

但是这个打开Safari browser

【问题讨论】:

  • 你必须使用WebView
  • 只需使用URLRequest 来执行此操作。
  • 如果您想分析您的应用程序,我认为您可以使用 Google -Firebase- Analytics、Fabric 或为此编写自己的 Web 服务实现。它对您的应用更有效。

标签: ios swift nsurl


【解决方案1】:

如果我没记错的话,您想在应用程序中打开 URL(不导航到外部 -Safari- 浏览器)。好吧,如果是这样的话,你应该使用UIWebView

您可以使用 UIWebView 类在您的应用中嵌入网页内容。到 这样做,创建一个 UIWebView 对象,将它附加到一个窗口,并发送给它 请求加载网页内容。你也可以使用这个类向后移动 并在网页历史中转发,甚至可以设置一些网页 以编程方式的内容属性。

WebViewController:

我建议将 UIWebView 添加到 ViewController(称为 WebViewController)中,并在需要时显示 ViewController;故事板上的 ViewController 应如下所示:

不要忘记为其分配 Storyboard ID。

还有 ViewController:

class WebViewController: UIViewController   {
    @IBOutlet weak private var webVIew: UIWebView!

    var urlString: String?

    override func viewDidLoad() {
        if let unwrappedUrlString = urlString {
            let urlRequest = URLRequest(url: URL(string: unwrappedUrlString)!)

            webVIew.loadRequest(urlRequest)
        }
    }

    @IBAction private func donePressed(_ sender: Any) {
        dismiss(animated: true, completion: nil)
    }
}

用法:

考虑你想在用户点击另一个 ViewController 中的按钮时呈现它:

class ViewController: UIViewController {
    @IBAction private func donePressed(_ sender: Any) {
        let stoyrboard = UIStoryboard(name: "Main", bundle: nil)

        // withIdentifier: the used storyboard ID:
        let webViewController = stoyrboard.instantiateViewController(withIdentifier: "WebViewController") as! WebViewController
        webViewController.urlString = "https://www.google.com/"

    }
}

或专门针对您的情况(选择一​​个单元格):

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    // withIdentifier: the used storyboard ID:
    let webViewController = stoyrboard.instantiateViewController(withIdentifier: "WebViewController") as! WebViewController
    webViewController.urlString = "URL GOES HERE..."
}

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    如果您的问题确实意味着您需要访问外部网站上的一些数据,以便从中提取一条信息,那么您可能根本不需要显示呈现的网页。

    你可以像这样提取页面的html内容

        var text = ""
    
        let url = URL(string: "https://www.bbc.co.uk")
        do
        {
            text = try String(contentsOf: url!, encoding: String.Encoding.utf8)
        }
        catch
        {
            print("error \(error.localizedDescription)")
        }
        if !text.isEmpty
        {
            parseThisPageSomehow(text)
        }
    

    如何解析文本取决于您需要从中获得什么,但这种方法将为您提供所需的数据。

    如果您使用 http 而不是 https,您将遇到有据可查的传输安全问题,这将迫使您为 http 设置临时覆盖,或者开始使用 https

    Transport security has blocked a cleartext HTTP

    【讨论】:

      猜你喜欢
      • 2011-12-22
      • 2015-02-11
      • 2020-06-01
      • 1970-01-01
      • 2012-11-18
      • 2012-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多