webview.URL?.absoluteString 返回 nil

webview.URL?.absoluteString returning nil

我的 webview.URL?.absoluteURL.absoluteString 返回零。这是 WKWebview,而不是 UIWebVIew,因此 webview.request?.URL?.absoluteString 不适用于此。我也试过 webview.URL?.absoluteString.

URL设置在另一个UIViewControllerclass中。 webview 本身加载正确,所以我知道 .URL 不是零。 (使用 cmd/ctrl+f '//Problem' 查找行):

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 class 中设置 URL 的函数。 Web 视图中的站点本身可以​​正确加载。

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
}

您应该使用 URL 的 absoluteString 属性。

webView.URL?.absoluteString

URL 只读 属性 将在您调用 loadRequest 后获取一个值。 这是一个示例:

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/")

很可能 webView.URL? 是零,因为它没有被设置。

如果您希望它被设置,请确保设置它的代码实际执行在您想要阅读它的代码之前