2016-12-19 2 views
0

Я создал WebView в ViewController и загрузки страницы, как этотПолучить параметры из ссылки в WebView

func loadAddress(){ 
    let requestURL = NSURL(string:"http://www.example.com/") 
    let request = NSURLRequest(url: requestURL as! URL) 
    webview.loadRequest(request as URLRequest) 
} 

И называют это в

viewDidLoad

I имеют несколько ссылок на странице с параметрами URL-адреса, подобными этому

http://www.example.com?id=1&title=ABC 

Теперь, когда пользователь нажимает на эту ссылку из приложения, то вместо того, чтобы перенаправление URL, я хочу, чтобы получить параметры из URL и открыть диалоговое окно, в прошивкой

Я нашел несколько примеров в Objective C, но я ищет решение в Swift 3

PS: у меня есть доступ к HTML этого сайта я могу заменить ссылки в соответствии с требованиями Xcode

EDIT: Вот что я попробовал, в том же файле, где мой WebView это я эта функция

func webView(_ webView: UIWebView,shouldStartLoadWith request: URLRequest,navigationType: UIWebViewNavigationType) -> Bool { 

    let scheme = request.url! 
    NSLog(scheme.absoluteString) 

    return false 

} 

, а также убедились, что класс является делегатом Webview

enter image description here

, что я делаю неправильно?

+0

Несвязанного к вашему вопросу, но обратите внимание, что вы не должны опущенная NSURL к URL или NSURLRequest для URLRequest [только использовать новые структуры непосредственно] (HTTP: //stackoverflow.com/Вопросы/37812286/скор-3-urlsession-разделяемая неоднозначная ссылка на члене-datataskwithcomplet/37812485 # 37812485). – Moritz

+0

xcode давал ошибки и предлагал это исправление самостоятельно –

+0

Возможно, но это не имеет значения. Xcode - это просто IDE, это не всегда правильно. На самом деле, иногда, это просто неправильно ...;) TL; DR: не утапливайте, когда вам не нужно, что бы ни говорил Xcode. – Moritz

ответ

0

вы должны обработать метод webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool, который принимает параметр URLRequest в качестве параметра. В этом методе вы можете делать все, что хотите, по этому URL.

Не забудьте указать свой класс в качестве делегата веб-представления.

Если вы хотите играть со строкой запроса, вы можете получить вдохновение от этого objective-c answer

+0

Под этой функцией у меня есть код, похожий на это, пусть схема = request.url! NSLog (schem.path) return true –

+0

и класс является делегатом webview, но ничего не печатает в журнале, когда я нажимаю ссылку –

+0

что делать, если вы пишете NSLog (schem.absoluteSring)? –

0

Я нашел решение сам, код я написал было правильно, я просто должен был убедиться, что мой класс также реализует UIWebViewDelegate

поэтому класс выглядит следующим образом

class Mainbillboard: UIViewController,UIWebViewDelegate { 


@IBOutlet weak var activity: UIActivityIndicatorView! 
@IBOutlet weak var webview: UIWebView! 


override func viewDidLoad() { 
    self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer()) 
    loadAddress() 
} 

func loadAddress(){ 
    let requestURL = NSURL(string:"example.com") 
    let request = NSURLRequest(url: requestURL as! URL) 
    webview.loadRequest(request as URLRequest) 

} 

func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool { 

    let scheme = request.url! 
    NSLog(scheme.absoluteString) 
    NSLog("here it worked!!") 

    return true 

} 


func webViewDidStartLoad(_:UIWebView){ 
    self.view.bringSubview(toFront: self.activity) 
    activity.startAnimating() 
    NSLog("Indicator is loading") 

} 

func webViewDidFinishLoad(_:UIWebView){ 
    activity.stopAnimating() 
    NSLog("Indicator stopped loading") 
} 

} 
+0

да, но вы сказали, что сделали, 3 раза –