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?
是零,因为它没有被设置。
如果您希望它被设置,请确保设置它的代码实际执行在您想要阅读它的代码之前。
我的 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?
是零,因为它没有被设置。
如果您希望它被设置,请确保设置它的代码实际执行在您想要阅读它的代码之前。