open webkit view in different viewcontroller - ios

I want to make an app for my mothers books where in the first viewcontroller there are images with buttons next to them that open a certain book in fullscreen. As much as I know I need a new viewcontroller to open webkitview in fullscreen. I managed to open webkitview in fullscreen through viewDidLoad() but I want to insert more than one book and that in a neet looking way.
All I need is to know how to tell the button to open the next viewcontroller where I spread webkitview over the whole display to make it act like fullscreen. Here is the code I did until now...
class ViewController: UIViewController {
#IBOutlet weak var webViewDisplay: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
let path = Bundle.main.path(forResource: "prayers", ofType: "pdf")
let url = URL(fileURLWithPath: path!)
let request = URLRequest(url: url)
webViewDisplay.load(request)
}
}

You should configure your WkWebView first but you can't do that from storyboard. Instead of outlet try to add WKWebView programmaticaly.
private var webView: WKWebView?
override func viewDidLoad() {
super.viewDidLoad()
let webViewConfiguration = WKWebViewConfiguration()
webView = WKWebView(frame: .zero, configuration: webViewConfiguration)
view = webView
let path = Bundle.main.path(forResource: "prayers", ofType: "pdf")
let url = URL(fileURLWithPath: path!)
let request = URLRequest(url: url)
webView.load(request)
}

Related

how to open url with dynamic query string in WKWebView

I have a button on my website which has href https://live.example.net/?dynamic_encypted_query-string, So I wanted to open this url in my webview of ios app. Currently I'm building a web app through capacitor framework where I wrote a code to my WebViewController.swift file
class WebViewController: UIViewController, WKUIDelegate {
var webView: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
let url = URL(string: "https://live.example.net/?*")
let myRequest = URLRequest(url: url!)
webView.load(myRequest)
// Do any additional setup after loading the view.
}
override func loadView() {
let webConfiguration = WKWebViewConfiguration()
webView = WKWebView(frame: .zero, configuration: webConfiguration)
webView.uiDelegate = self
view = webView
}
}
This opens the domain(https://live.example.net) in the web view but i wanted to open it with the query string data.
let url = URL(string: "https://live.example.net/?*")
I think this doesn't work to fetch the query string data as well.

Error : Cannot convert value of type 'URL?' to expected argument type 'URLRequest

import UIKit
import WebKit
class ViewController: UIViewController, WKNavigationDelegate {
var webView : WKWebView!
override func loadView() {
webView = WKWebView()
webView.navigationDelegate = self
view = webView
}
override func viewDidLoad() {
super.viewDidLoad()
let url = URL(string: "https://www.google.com")!
webView.load(url)
webView.allowsBackForwardNavigationGestures = true
}
}
Hello, I am new to Swift programming. I am trying to load a simple website on navigation controller with the help of WKWebView. But I am unable to continue with it. As I am facing an error with line
let URL = let url = URL(string: "https://www.google.com")!
I need to know two things
What does the error mean?
How can I resolve it?
The error is pretty clear. You need to pass a URLRequest object as parameter.
let url = URL(string: "https://www.google.com")!
webView.load(URLRequest(url: url))

How can we play YouTube Videos now with iOS?

I'm taking a course online that shows how to play videos from a url. But it's always the bunny one. I've been looking how to play YouTube videos, been finding that they use to use UIWebView. Since it's been deprecated, how would I be able to play them now. This is how my code looks like.
import UIKit
import AVKit
import AVFoundation
class CourseDetailVC: UIViewController {
#IBOutlet weak var descriptionTextView: UITextView!
#IBOutlet weak var titleLabel: UILabel!
#IBOutlet weak var authorButton: UIButton!
#IBOutlet weak var backgroundImage: UIImageView!
var course: Courses.Course?
#IBAction func playURLVideo() {
guard let videoURL = URL(string: course?.videoUrl ?? "") else { return }
let player = AVPlayer(url: videoURL)
let playerViewController = AVPlayerViewController()
playerViewController.player = player
self.present(playerViewController, animated: true) {
playerViewController.player!.play()
}
}
I just have a button. When I press it I would like to play a YouTube video. Now this works with the bunny one. How would I be able to play this YouTube video.
Screenshot after button is press
Updated Code
#IBAction func playButtonPress() {
// Create Video player
var mywkwebview: WKWebView?
let mywkwebviewConfig = WKWebViewConfiguration()
mywkwebviewConfig.allowsInlineMediaPlayback = true
mywkwebview = WKWebView(frame: self.view.frame, configuration: mywkwebviewConfig)
let myURL = URL(string: "https://www.youtube.com/embed/JePnQ1gSagc?playsinline=1?autoplay=1")
let youtubeRequest = URLRequest(url: myURL!)
mywkwebview?.load(youtubeRequest)
guard let webView = mywkwebview else { return }
self.view.addSubview(webView)
}
Here's a solution to WKWebView
Since YouTube has functionality to load any video in fullscreen in a webview without any of the scrolling features using a URL in the format https://www.youtube.com/embed/<videoId>.
The given video above has an ID of (https://www.youtube.com/watch?v=1roy4o4tqQM) -- [1roy4o4tqQM]
mywkwebviewConfig.allowsInlineMediaPlayback = true
mywkwebview = WKWebView(frame: self.view.frame, configuration: mywkwebviewConfig)
let myURL = URL(string: "https://www.youtube.com/embed/1roy4o4tqQM?playsinline=1?autoplay=1")
var youtubeRequest = URLRequest(url: myURL!)
mywkwebview.load(youtubeRequest)
Updated code:
#IBAction func playURLVideo() {
var mywkwebview: WKWebView?
let mywkwebviewConfig = WKWebViewConfiguration()
mywkwebviewConfig.allowsInlineMediaPlayback = true
mywkwebview = WKWebView(frame: self.view.frame, configuration: mywkwebviewConfig)
let myURL = URL(string: "https://www.youtube.com/embed/1roy4o4tqQM?playsinline=1?autoplay=1")
var youtubeRequest = URLRequest(url: myURL!)
mywkwebview.load(youtubeRequest)
}
You need to add ?autoplay=1 to the end of the embed URL

How to load excel / pdf server url in WKWebView Swift4

I wanted to load the excel sheet url/pdf url (document url) in WKWebView. As I am trying to open that url from browser then it directly downloads that document. So I am confused whether 1] I have to directly load the url into WKWebView or 2] first download those files and then load that local path in WKWebView.
If I go with the 2nd option then will my document download every time?
Following is the code which I have tried but it shows nothing
import UIKit
import WebKit
class OpenReportsFullScreenVC: UIViewController,WKUIDelegate {
var webView : WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
//first way :- webView.load(URLRequest(url: URL(string: "http://ipaddress/projects/ourivf/newourivf/assets/uploads/patient_image/attorney_details - Copy.xls")!))
// second way
let filePathURLData = "http://ipaddress/projects/ourivf/newourivf/assets/uploads/patient_image/attorney_details - Copy.xls"
let fileURL = URL(fileURLWithPath: filePathURLData )
webView.loadFileURL(fileURL, allowingReadAccessTo: fileURL)
}
override func loadView() {
//initialise webview
let webViewConfiguration = WKWebViewConfiguration()
webView = WKWebView(frame: .zero, configuration: webViewConfiguration)
webView.uiDelegate = self
view = webView
}
}
Try with this code
import UIKit
import WebKit
class ViewController: UIViewController , **WKNavigationDelegate**{
var webView : WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
let myBlog = "your URl"
let url = NSURL(string: myBlog)!
let request = NSURLRequest(url: url as URL)
webView = WKWebView(frame: self.view.frame)
webView.navigationDelegate = self
webView.load(request as URLRequest)
self.view.addSubview(webView)
self.view.sendSubview(toBack: webView)
}
}
File path cannot have blank characters like in your example.

Intercept javascript file from loading in web view

I am using WKWebView to make a web view app
let url = NSURL(string: "http://www.example.com")
let request = NSURLRequest(url: url! as URL)
homeWebView.load(request as URLRequest)
But I want to intercept some javaScript file of this website before it
loads to change functionality and make the app a bit native looking
Any help would be appreciated.
Thank You.
Following is the complete example. I hope it will help you.
import UIKit
class ViewController: UIViewController,UIWebViewDelegate {
private var webView: UIWebView!
override func loadView() {
webView = UIWebView(frame: .zero)
webView.delegate = self
view = webView
}
override func viewDidLoad() {
super.viewDidLoad()
// set the view controller title, navigation etc
self.loadWebPage()
}
func loadWebPage() {
let url = URL(string: "https://www.google.com.pk/")
// let localFileURL = URL(fileURLWithPath: Bundle.main.path(forResource: "ExampleHtmlFileName", ofType: "html", inDirectory: "HtmlFilesFolderName")!)
let myRequest = URLRequest(url: url!)
webView.loadRequest(myRequest)
}
//MARK: UIWebView Delegate
func webViewDidFinishLoad(_ webView: UIWebView) {
let jsScript = "exampleJSMethod()"
_ = webView.stringByEvaluatingJavaScript(from: jsScript)
}
}

Resources