Really basic question here: I have a web view in my view controller, and can't figure out how to make it display a website. None of the solutions I've been able to find are working for me. Most of what I've seen online tells me to enter the code below (sample url), but I get errors telling me to delete '#' and add several ';' but doing so does not resolve the issues.
- (void)viewDidLoad {
[super viewDidLoad];
NSString *fullURL = #"http://conecode.com";
NSURL *url = [NSURL URLWithString:fullURL];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
[_viewWeb loadRequest:requestObj];
I'm not sure why I'm having so much difficulty with something that seems so simple...here is all I have in my code. How do I make the web view show a website? Thanks in advance! I've already learned a lot from this community.
import UIKit
class SecondViewController: UIViewController {
#IBOutlet var webView: UIWebView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
After a bit more digging here's what I've found that seems to work:
var url = NSURL(string: "https://www.google.com")
var request = NSURLRequest(URL: url!)
webView.loadRequest(request)
I'm not sure how this relates to the earlier code snippets I had been finding, and it doesn't work for http (vs https) websites, so that's something I still need to figure out...
Here is how to load a page to UIWebView.
#IBOutlet var webView: UIWebView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
var url = NSURL(string: "https://www.google.com")
var request = NSURLRequest(URL: url!)
webView.loadRequest(request)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
For the problem with http NSAppTransportSecurity key to your info.plist
Here is example:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSExceptionDomains</key>
<dict>
<key>google.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
</dict>
</dict>
</dict>
NSAllowsArbitraryLoads - it allow to connect to any http site.
or you could specifity the site with NSExceptionDomains - like I post in the code above.
On more thing - Check WKWebView - it much better than UIWebView for displaying pages. - https://developer.apple.com/library/ios/documentation/WebKit/Reference/WKWebView_Ref/
Related
I am loading a url in a UIWebView as below:
import UIKit
class ViewController: UIViewController {
#IBOutlet weak var MainWebView: UIWebView!
override func viewDidLoad() {
super.viewDidLoad()
let url = NSURL(string: "http://www.odysseynewsmagazine.net")
let request = NSURLRequest(url:url! as URL)
self.MainWebView!.loadRequest(request as URLRequest)
}
}
IBOutlet is connected and my .plist has App Transport Security Settings and Allow Arbitrary Loads set to YES.
Why is the app building a blank page?
Try
override func viewDidLoad() {
super.viewDidLoad()
let url = URL(string: "https://www.google.com")! // it works ? Comment line and uncomment the following one
// let url = URL(string: "http://www.odysseynewsmagazine.net")!
let request = URLRequest(url: url)
mainWebView.load(request) // var should start with lower case
}
If it works, change the URL. If it doesn't work only with your URL then there's something wrong with either the site or ATS. Paste the console output.
Ok. So here is the normal web-view loading your URL with just the App transport security setting
#IBOutlet weak var webView: UIWebView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let url = NSURL(string: "http://www.odysseynewsmagazine.net")
let request = NSURLRequest(url:url! as URL)
self.webView.loadRequest(request as URLRequest)
}
And the plist setting set to
Allow Arbitrary Loads to YES.
And result is:
Your code is just fine!!!
Your issue is you have missed add NSAllowsArbitraryLoadsInWebContent key in your NSAppTransportSecurity dictionary and set value to TRUE
To fix this you only need replicate the below image in your plist
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSAllowsArbitraryLoadsInWebContent</key>
<true/>
</dict>
Your webView rendering the webView content, your code is unchanged
Hope this helps
I'm new to Swift programming and I'm trying to load the web content of a website into my app using UIWebView. But all I get is the skeleton of the webpage i.e. the html. How should I load the css and javascript of the website?
This is my ViewController.swift file.
//
// ViewController.swift
//
import UIKit
class ViewController: UIViewController {
#IBOutlet weak var webView: UIWebView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let url = NSURL(string: "http://www.smartanalyzers.com")
let task = NSURLSession.sharedSession().dataTaskWithURL(url!)
{
(data, response, error) in
if error == nil {
var urlContent = NSString(data: data!, encoding: NSUTF8StringEncoding)
print(urlContent)
dispatch_async(dispatch_get_main_queue()){
self.webView.loadHTMLString(urlContent! as String, baseURL: nil) }
}
}
task.resume()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
You can load the website in a much simpler way:
if let url = NSURL(string: "http://www.smartanalyzers.com") {
webView.loadRequest(NSURLRequest(URL: url))
}
However when running this in iOS9 you need to disable Apple's App Transport Security for this website or it will not load, because it does not use HTTPS.
To allow HTTP loads from the website's domain you have to add this to your Info.plist file:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>smartanalyzers.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
</dict>
If you see that fonts or images are still not loaded correctly, check if they are loaded from different domains and add those domains to the NSExceptionDomains Dictionary in Info.plist
This question already has answers here:
How do I load an HTTP URL with App Transport Security enabled in iOS 9? [duplicate]
(8 answers)
Closed 7 years ago.
My UIWebView will not load and I am extremely confused why.The webview was working a few weeks ago. The site that it linked to got updated. But for some reason now any link I send to it doesn't work. I tried clearing the cache. I am a little lost to why this wont appear. Internet on my phone works fine. Everything in the storyboard is connected properly.
The activity indicator keeps spinning. And my alert comes up from the didFailLoadWithError, which is supposed to happen, but it would be nice to figure out why it won't connect.. Any help would be great, thank you.
class CommunityViewController: UIViewController, UIWebViewDelegate {
#IBOutlet weak var activityIndicator: UIActivityIndicatorView!
#IBOutlet weak var communityWeb: UIWebView!
var refreshControl:UIRefreshControl!
let url = "http://www.google.com"
override func viewWillAppear(animated: Bool) {
NSURLCache.sharedURLCache().removeAllCachedResponses()
NSURLCache.sharedURLCache().diskCapacity = 0
NSURLCache.sharedURLCache().memoryCapacity = 0
}
override func viewDidLoad() {
super.viewDidLoad()
self.communityWeb.delegate = self
let requestURL = NSURL(string:url)
let request = NSURLRequest(URL: requestURL!, cachePolicy: NSURLRequestCachePolicy.ReloadIgnoringLocalAndRemoteCacheData,
timeoutInterval: 3.0)
communityWeb.loadRequest(request)
self.refreshControl = UIRefreshControl()
self.refreshControl.attributedTitle = NSAttributedString(string: "")
self.refreshControl.addTarget(self, action: "refresh:", forControlEvents: UIControlEvents.ValueChanged)
self.communityWeb.scrollView.addSubview(refreshControl)
}
func refresh(sender:AnyObject)
{
let requestURL = NSURL(string:url)
let request = NSURLRequest(URL: requestURL!)
communityWeb.loadRequest(request)
refreshControl.endRefreshing()
}
func webViewDidStartLoad(webView: UIWebView) // here show your indicator
{
self.activityIndicator.startAnimating()
}
func webViewDidFinishLoad(webView: UIWebView) {
self.activityIndicator.stopAnimating()
self.activityIndicator.hidesWhenStopped = true
self.communityWeb.scrollView.contentSize.width = self.communityWeb.frame.size.width
}
func webView(webView: UIWebView, didFailLoadWithError error: NSError?) {
let alertView = SIAlertView(title: "Internet Connection", andMessage: "Connect to the internet to receive latest updates from the Community")
alertView.addButtonWithTitle("OK", type: SIAlertViewButtonType.Default, handler:
{alertView in
NSLog("pressed")
})
alertView.transitionStyle = SIAlertViewTransitionStyle.Fade
alertView.show()
}
I think you forgot to update your info.plist file.
Add this key into your file:
The lazy option is:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
Or you can directly add that into your info.plist and it will look like:
And you can add a specific domain like:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>yourserver.com</key>
<dict>
<!--Include to allow subdomains-->
<key>NSIncludesSubdomains</key>
<true/>
<!--Include to allow HTTP requests-->
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<!--Include to specify minimum TLS version-->
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
</dict>
</dict>
</dict>
Tired of posting questions on SO about the same problem and still not getting solution..If anyone solves this i am gonna award bounty to user afterwards.
I am trying to play video that is on server.A video from the Url(which is commented) gets played but the other dont.What am i doing wrong??
class VideoViewController: UIViewController {
var moviePlayer:MPMoviePlayerController!
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewDidAppear(animated: Bool) {
//var url = NSURL(string: "http://devimages.apple.com/iphone/samples/bipbop/gear1/prog_index.m3u8")
//playVideoFromURL(url!)
var url = NSURL(string: "private url")
playVideoFromURL(url!)
}
func playVideoFromURL( address: NSURL ) {
println(address)
var playerVC = MPMoviePlayerViewController(contentURL: address)
playerVC.modalTransitionStyle = UIModalTransitionStyle.CoverVertical
self.presentViewController(playerVC, animated: false, completion: nil)
playerVC.moviePlayer.prepareToPlay()
playerVC.moviePlayer.play()
}
}
Movie player plays the video of the commented ones but doesnot plays the other.What may be the reason for this?
Your code is correct. All you need is to update your info.plist file by adding this key:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key><true/>
</dict>
Or you can add it another way and it will look like:
I am new to Swift / iOS and am trying to use webView to be able to view a url. Searching this site and countless others I managed to be able to access google by using
var url = NSURL(string: "https://www.google.com")
This works fine with "https" but does not work if I use "http".
Is the "s" a security setting? How can I view sites with a "URL scheme" of "http".
Hope you can assist.
import UIKit
import WebKit
import Foundation
class ViewController: UIViewController {
#IBOutlet var containerView : UIView? = nil
var webView:WKWebView?
//instatiating the webView
override func loadView() {
super.loadView()
self.webView = WKWebView()
self.view = self.webView
}
override func viewDidLoad() {
super.viewDidLoad()
//Loading and showing a web-page
var url = NSURL(string: "https://www.google.com")
//var url = NSURL(string: "http://www.google.com")
var req = NSURLRequest(URL:url!)
self.webView!.loadRequest(req)
}
}
Editing the info.plist and adding App Transport Security Settings and add to that Allow Arbitrary Loads and the Boolean = yes
just add this line in your info.plist
info.plist is an XML file so you can place this code more or less anywhere inside the file.
this is the configuration to allow a specific domain to use HTTP instead of HTTPS:
<key>NSAppTransportSecurity</key>
<dict>
<!--Include to allow all connections (DANGER)-->
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
Try with http://stackoverflow.com. it worked for me
var url = NSURL(string: "http://stackoverflow.com/")
//var url = NSURL(string: "http://www.google.com")//Comment this
var req = NSURLRequest(URL:url!)
self.webView!.loadRequest(req)