Reputation: 73
my webview.URL?.absoluteURL.absoluteString
is returning nil. This is a WKWebview
, not a UIWebVIew
, so webview.request?.URL?.absoluteString
will not work for this. I have also tried webview.URL?.absoluteString
.
The URL is set in another UIViewController class. The webview itself loads properly, so I know .URL is not nil. (use cmd/ctrl+f '//Problem' to find line):
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
})
}
The func in another UIViewController class that sets the URL. Site in web view itself loads properly.
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
}
Upvotes: 1
Views: 3217
Reputation: 5797
You should use the absoluteString attribute of URL.
webView.URL?.absoluteString
the URL read-only property will get a value after you call loadRequest. Here is a sample:
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)
}
This will print the following:
nil
Optional("https://www.google.com/")
Upvotes: 1
Reputation: 5846
Most likely webView.URL?
is nil because it was not set.
If you expect it to be set, make sure that the code setting it is actually executed before the code in which you want to read it.
Upvotes: 0