【问题标题】:How do I enable links to open in default browser on WebView [duplicate]如何启用链接以在 WebView 上的默认浏览器中打开 [重复]
【发布时间】:2016-04-14 09:53:50
【问题描述】:

我正在学习 OS X/Swift 开发并加载了一个网页,其中包含指向其他网站的链接,我如何在默认浏览器中打开这些链接。在点击链接的那一刻,什么都没有发生。这是我的 ViewController.swift 内容:

import Cocoa
import WebKit
import Foundation

class ViewController: NSViewController, WebFrameLoadDelegate, WKNavigationDelegate {

    @IBOutlet weak var webView: WebView!

    override func viewDidLoad() {
        super.viewDidLoad()

        let URL = "https://test.mywebsite.com"

        self.webView.frameLoadDelegate = self
        self.webView.mainFrame.loadRequest(NSURLRequest(URL: NSURL(string: URL)!))



    }

    override var representedObject: AnyObject? {
        didSet {
        // Update the view, if already loaded.
        }
    }


}

【问题讨论】:

标签: swift macos cocoa webview


【解决方案1】:

我不完全清楚你在问什么。

认为您是在问如何在桌面浏览器(例如 Safari)中打开 WebView 中单击的链接?

如果这是您想要实现的目标,您可以使用WebPolicyDelegate 来确定应该在哪里打开 URL。

例如。

import Cocoa
import WebKit

class ViewController: NSViewController, WebFrameLoadDelegate, WebPolicyDelegate {

    @IBOutlet weak var webView: WebView!

    let defaultURL = "http://www.apple.com/"  // note we need the trailing '/' to match with our 'absoluteString' later

    override func viewDidLoad() {
        super.viewDidLoad()

        self.webView.frameLoadDelegate = self
        self.webView.policyDelegate = self
        self.webView.mainFrame.loadRequest(NSURLRequest(URL: NSURL(string: defaultURL)!))

    }

    func webView(webView: WebView!, decidePolicyForNavigationAction actionInformation: [NSObject : AnyObject]!, request: NSURLRequest!, frame: WebFrame!, decisionListener listener: WebPolicyDecisionListener!) {

        if let currentURL = request.URL {
            if currentURL.absoluteString == defaultURL {
                print("our base/default URL is being called - showing in WebView")
                listener.use()   // tell the listener to show the request
            } else {
                print("some other URL - ie. a link has been clicked - ignore in WebView")
                listener.ignore()   // tell the listener to ignore the request
                print("redirecting url: \(currentURL.absoluteString) to standard browser")
                NSWorkspace.sharedWorkspace().openURL(currentURL)
            }
        }
    }

}

如果这不是您要问的,您能否编辑您的问题以使其更清楚。

【讨论】:

  • 使用,这就是我要问的。使用此代码会在您运行应用程序时立即打开链接,它不会等到用户单击链接。我运行应用程序并自动打开链接。
  • 我刚刚用我提供的代码再次尝试了这个,它似乎工作正常。使用情节提要创建了一个新的 Cocoa 应用程序。在 Interface Builder 的情节提要中添加了一个 WebView。将上述代码粘贴到 ViewController 代码之上。将 WebView 链接到 ViewController。运行应用程序。当在 WebView 中单击链接时,它仅在浏览器中页面。你能在某处提供你的实际代码吗?我会仔细研究一下为什么你会得到不同的结果。
猜你喜欢
  • 2011-07-26
  • 1970-01-01
  • 2011-05-12
  • 1970-01-01
  • 1970-01-01
  • 2015-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多