当前位置: 首页 > 面试题库 >

WKWebView在Safari中打开来自某些域的链接

郎诚
2023-03-14
问题内容

在我的应用程序中,我想在WKWebView中从 我的 域(例如:communionchapelefca.org)内打开链接,然后在Safari中打开来自
其他 域(例如:google.com)的链接。我希望以编程方式执行此操作。

我已经找到了一些关于Stack溢出的解决方案,但是它们似乎都是基于Obj-C的,我正在寻找使用Swift的解决方案。

ViewController.swift:

import UIKit
import WebKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let myWebView:WKWebView = WKWebView(frame: CGRectMake(0, 0,   UIScreen.mainScreen().bounds.width, UIScreen.mainScreen().bounds.height))

        myWebView.loadRequest(NSURLRequest(URL: NSURL(string: "http://www.communionchapelefca.org/app-home")!))

        self.view.addSubview(myWebView)

问题答案:

您可以实现WKNavigationDelegate添加decidePolicyForNavigationAction方法,然后在其中检查navigationType和所请求的url。我在下面使用了
**google.com** ,但您可以将其更改为您的域:

Xcode 8.3•Swift 3.1或更高版本

import UIKit
import WebKit

class ViewController: UIViewController, WKNavigationDelegate {

    let webView = WKWebView()

    override func viewDidLoad() {
        super.viewDidLoad()

        webView.frame = view.bounds
        webView.navigationDelegate = self

        let url = URL(string: "https://www.google.com")!
        let urlRequest = URLRequest(url: url)

        webView.load(urlRequest)
        webView.autoresizingMask = [.flexibleWidth,.flexibleHeight]
        view.addSubview(webView)
    }

    func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
        if navigationAction.navigationType == .linkActivated  {
            if let url = navigationAction.request.url,
                let host = url.host, !host.hasPrefix("www.google.com"),
                UIApplication.shared.canOpenURL(url) {
                UIApplication.shared.open(url)
                print(url)
                print("Redirected to browser. No need to open it locally")
                decisionHandler(.cancel)
            } else {
                print("Open it locally")
                decisionHandler(.allow)
            }
        } else {
            print("not a user click")
            decisionHandler(.allow)
        }
    }
}


 类似资料:
  • 问题内容: 我试图让使用斯威夫特和WKWebviews打开,有一个链接我的混合iOS应用程序,或者如果URL中包含,或在移动Safari浏览器。 从这个答案我得到了这段代码。 首先,那对我没有任何帮助。其次,我希望它在新窗口中打开。我发现该代码应该执行类似的操作… 如何将这两部分放在一起并使它们工作?我需要添加什么到ViewController声明中才能使其工作? 问题答案: 针对iOS 10 S

  • 如果Chrome能在我期望的时候打开文件,那就太好了。我会很感激你的帮助。

  • 问题内容: 我有以下HTML页面。我想获取特定div中的所有链接。这是我的HTML代码: 我想获取div 中存在的所有链接。所以我想要的那些链接是 这是我尝试过的Python代码 如何在Python上使用Selenium获得这些链接? 问题答案: 按照您共享的HTML来获取div 上所有链接的列表,您可以使用以下代码块: 注意 :由于您需要从 div 标记中收集所有 href 属性,因此您无需使用

  • 本文向大家介绍javascript实现阻止iOS APP中的链接打开Safari浏览器,包括了javascript实现阻止iOS APP中的链接打开Safari浏览器的使用技巧和注意事项,需要的朋友参考一下 上次根据网上的教程给自己的网站弄了一个Web APP,但是给用户的感觉却十分糟糕。 问题说明: 怎么了?原来是打开WEB APP后在主页上随意打开连接,就会自作主张地打开Safari浏览器。原

  • 我使用elasticsearch 0.90.2和elasticsearch river mongodb 1.7.0从mongodb的oplog中检索数据。在我试图索引的集合中,我有数千条结构化记录,让我们把它们命名为“field1”、“field2”、“field3”字段10' 有没有办法只索引“field1”和“field2”?这些是字符串还是日期对象有关系吗? 谢啦

  • 我有一个使用LinkedIn的OAuth API处理用户登录的web应用程序。该页面将重定向到LinkedIn的域名,然后在用户通过身份验证后返回到我的域名。当我的应用程序通过Safari添加到iOS上的主屏后运行时,LinkedIn身份验证页面在Safari中打开,而不是在主屏应用中打开。 我认为这是因为LinkedIn.com在我的应用程序的web清单中的属性之外? 有没有人有一个解决方案来保