2016-03-29 44 views
0

我的webview.URL?.absoluteURL.absoluteString返回零。這是WKWebview,而不是UIWebVIew,所以webview.request?.URL?.absoluteString不適用於此。我也試過webview.URL?.absoluteStringwebview.URL?.absoluteString返回零

該URL在另一個UIViewController類中設置。 webview本身正確加載,所以我知道.URL不是零。 (使用CMD/CTRL + F '//問題' 查找線):

override init(frame: CGRect) { 
    super.init(frame: frame) 
    gestureRecognizers = [UIPanGestureRecognizer(target:self, action:"moveWindow:")] 
    //Change aspects of our view (width, height, color, etc) 
    header.frame.size.width=frame.size.width 
    header.frame.size.height=45 
    header.layer.cornerRadius = 4 
    //addSubview(header) 
    windowMask.frame=frame 
    stackButton.frame=frame 
    windowMask.layer.cornerRadius = 6 
    windowMask.clipsToBounds=true 

    layer.shadowColor = UIColor.blackColor().CGColor 
    layer.shadowOpacity = 1 
    layer.shadowRadius = 5 
    layer.shadowOffset = CGSizeMake(0, 1); 
    layer.cornerRadius = 6 
    backgroundColor = UIColor(patternImage: UIImage(named: "Window Texture.png")!) 
    //opaque=false 
    //backgroundColor = UIColor.clearColor() 
    addSubview(windowMask) 
    dragArea.frame.size.width=frame.size.width-120 
    dragArea.frame.origin.x=40 
    dragArea.frame.origin.x=40 
    //addSubview(dragArea) 
    //Our webview for... well, isn't it obvious? 
    webview.frame = CGRectMake(0, 40, frame.width, frame.height-40) 
    webview.allowsBackForwardNavigationGestures=true 
    windowMask.frame=CGRectMake(0, 0, frame.width, frame.height) 
    windowMask.addSubview(webview) 
    //The back button 
    bbutton.setImage(UIImage(named: "Back"), forState: .Normal) 
    bbutton.frame = CGRectMake(5, 5, 30, 30) 
    windowMask.addSubview(bbutton) 
    bbutton.addTarget(self, action: "bbuttonPressed:", forControlEvents: .TouchUpInside) 
    //The large button to select a window in the Stack menu 
    stackButton.addTarget(self, action: "stackSelected:", forControlEvents: .TouchUpInside) 
    //The resize button for making the window fullscreen 
    rbutton.setImage(UIImage(named: "Max"), forState: .Normal) 
    rbutton.frame = CGRectMake(frame.width-60, 7, 25, 25) 
    windowMask.addSubview(rbutton) 
    rbutton.addTarget(self, action: "rbuttonPressed:", forControlEvents: .TouchUpInside) 
    //The X button for closing a window 
    xbutton.frame = CGRectMake(frame.width-35, 5, 30, 30) 
    xbutton.setImage(UIImage(named: "Close"), forState: .Normal) 
    windowMask.addSubview(xbutton) 
    xbutton.addTarget(self, action: "xbuttonPressed:", forControlEvents: .TouchUpInside) 
    //The button for adjusting window size 
    abutton.frame = CGRectMake(frame.width-20, frame.height-20, 20, 20) 
    abutton.setImage(UIImage(named: "Resize"), forState: .Normal) 
    windowMask.addSubview(abutton) 
    abutton.addTarget(self, action: "abuttonDragged:", forControlEvents: .TouchDown) 
    //The task button 
    taskButton.frame.size=CGSizeMake(60,60) 
    taskButton.backgroundColor=UIColor.whiteColor() 
    taskButton.frame.origin=CGPointMake(CGFloat(system.windows.count)*60,60) 
    taskButton.addTarget(self, action: "taskSelected:", forControlEvents: .TouchDown) 
    //Problem here: 
    let imgURL = NSURL(string: "http://google.com/s2/favicons?domain="+(self.webview.URL?.absoluteString)!) 
    print(self.webview.URL?.absoluteURL.absoluteString) 
    let imageRequest: NSURLRequest = NSURLRequest(URL: imgURL!) 
    NSURLConnection.sendAsynchronousRequest(
     imageRequest, queue: NSOperationQueue.mainQueue(), 
     completionHandler: {(response: NSURLResponse?,data: NSData?,error: NSError?) -> Void in 
      if error == nil { 
       self.taskButton.setImage(UIImage(data: data!),forState: .Normal) 
      } 
    }) 
    UIView.animateWithDuration(0.2, animations: { 
     self.frame.origin.y=50 
     self.taskButton.frame.origin.y=0 
    }) 
} 

在另一個UIViewController類,其設定的URL FUNC。網站視圖中的網站本身會正確加載。

func addWindowButtonPressed(sender: UIButton!) { 
    let url = NSURL(string: "https://google.com") 
    let request = NSURLRequest(URL: url!) 
    let newView = Window(frame: CGRectMake(self.view.frame.size.width/2-200,self.view.frame.size.height, 400, 300)) 
    if !system.stacked { 
     view.addSubview(newView) 
     newView.webview.loadRequest(request) 
     system.windows.append(newView) 
     taskView.addSubview(newView.taskButton) 
     newView.windowID=system.windows.count 
     taskView.contentSize.width=CGFloat(system.windows.count)*60 
    } 
    taskView.contentSize.width=CGFloat(system.windows.count)*60 
} 
+0

如果您已經在實施WKNavigationDelegate,您可以在DecisionPolicyForNavigationAction方法中檢查navigationAction.request.URL。 –

+0

這個'init'是什麼類? – szym

回答

1

您應該使用URL的absoluteString屬性。

webView.URL?.absoluteString 

在您調用loadRequest之後,URL只讀屬性將獲得一個值。 下面是一個示例:

func loadWebPage(url : NSURL!) 
{ 
    let urlbefore = webView.URL?.absoluteString 
    print (urlbefore) 

    let theRequest = NSMutableURLRequest(URL:url, cachePolicy:NSURLRequestCachePolicy.ReturnCacheDataElseLoad, timeoutInterval:15.0) 
    self.webView.loadRequest(theRequest) 

    let urlafter = webView.URL?.absoluteString 
    print (urlafter)  
} 

這將打印以下內容:

nil 
Optional("https://www.google.com/") 
+1

你叫什麼名字?請向我們展示您的代碼。 如果您在didFinishNavigation或didFailNavigation委託中調用它,您將獲得一個值。 –

+0

我檢查了你的代碼,並且沒有找到你調用WKWebView的loadRequest函數的地方。這就是你無法獲得零的原因。 –

+0

您是否將此類的webView設置爲另一個類的webView?從上面的代碼中,您似乎在這裏創建一個新的webView。這可能是它爲零的原因。 –

0

最有可能webView.URL?是零,因爲它沒有設置。

如果您希望設置它,請確保設置它的代碼實際上是在之前執行的您要讀取它的代碼。

+0

是的,但它在檢查時可能沒有值*你確定在初始化視圖之後沒有設置URL嗎? –