2015-06-24 7 views
1

Я сделал очень простое приложение Swift, которое загружает веб-страницу со ссылками на нее. Всякий раз, когда я нажимаю ссылки, они не открываются. Как мне получить доступ к ссылкам на загруженной веб-странице .html в окне браузера для OS X?Открыть URL WebView в браузере

Вот моя реализация:

import Cocoa 
import WebKit 

class ViewController: NSViewController { 

    @IBOutlet weak var webView: WebView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     let urlString = "URL" 
     self.webView.mainFrame.loadRequest(NSURLRequest(URL: NSURL(string: urlString)!)) 
    } 

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

Невозможно узнать, что происходит без дополнительной информации. Пожалуйста, разместите свой код UIWebView и любые соответствующие сообщения об ошибках. – JAL

+0

Извините. Я добавил его на главный пост. – Matthew

+0

Я только что предложил другое редактирование, чтобы исправить теги, так как [тег: uiwebview] должен использоваться только для вопросов iOS. Прошу прощения. – JAL

ответ

1

Во-первых, установить WebView «ы политики делегата и ваш первоначальный URL в качестве переменной класса:

let url = NSURL(string: "http://www.google.com/")! 

// ... 

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Do any additional setup after loading the view. 

    self.webView.policyDelegate = self 

    self.webView.mainFrame.loadRequest(NSURLRequest(URL: self.url)) 
} 

Затем переопределять методы делегата для перехвата навигации ,

override func webView(webView: WebView!, decidePolicyForNewWindowAction actionInformation: [NSObject : AnyObject]!, request: NSURLRequest!, newFrameName frameName: String!, decisionListener listener: WebPolicyDecisionListener!) { 
    println(__LINE__) // the method is needed, the println is for debugging 
} 


override func webView(webView: WebView!, decidePolicyForNavigationAction actionInformation: [NSObject : AnyObject]!, request: NSURLRequest!, frame: WebFrame!, decisionListener listener: WebPolicyDecisionListener!) { 
    if request.URL!.absoluteString == self.url.absoluteString { // load the initial page 
     listener.use() // load the page in the app 
    } else { // all other links 
     NSWorkspace.sharedWorkspace().openURL(request.URL!) // take the user out of the app and into their default browser 
    } 
} 
+0

Спасибо! Это работало. Могу ли я использовать один и тот же метод для пунктов меню, чтобы их открывать в браузере? – Matthew

+0

Вы имеете в виду параметры под 'File',' Edit', ...? Да, просто используйте 'NSWorkspace.sharedWorkspace(). OpenURL (someURL)' – JAL

+0

Если мой ответ помог вам пометить его как принятое. Если у вас есть какие-либо вопросы по поводу пунктов меню, лучше спросить новый вопрос. – JAL

0

Кроме того, вы можете решить, какие ссылки открыть в WebView и что - в браузере, как легко, как написать целевой атрибут в вашей HTML странице, как

<a href="http://www.google.com/" target="_blank">external page</a> 

и использовать целевую проверку в decidePolicyForNewWindowAction, menthioned выше. Я поместил полный ответ в поток this question. Надеюсь, вы сможете перевести его, чтобы быстро подружиться.

Смежные вопросы