Execute javascript in WKWebView outside of the screen
Is it still possible to launch WKWebView
out of view hierarchy for executing javascript? My goal is to find a picture on the internet and show it inside my app without flashing webView on the screen.
I have seen similar topics on StackOverflow, but all working solution doesn't work now..., at least for me.
Here is what I have so far
import UIKit
import WebKit
class ViewController: UIViewController, WKUIDelegate,WKNavigationDelegate {
var webView: WKWebView!
@IBOutlet weak var smallView: UIView!
var locationImage:String?
override func loadView() {
let webConfiguration = WKWebViewConfiguration()
webView = WKWebView(frame: CGRect(x: 0, y: 0, width: 100, height: 100), configuration: webConfiguration)
webView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
}
override func viewDidLoad() {
super.viewDidLoad()
webView.uiDelegate = self
webView.navigationDelegate = self
let myURL = URL(string:"https://www.google.ca/search?q=00.7732164,-10.334838")
let myRequest = URLRequest(url: myURL!)
webView.load(myRequest)
}
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
injectJS()
}
func injectJS(){
self.webView.evaluateJavaScript("document.getElementById('rso').getElementsByTagName('img')[0].src", completionHandler: { result, error in
if error == nil {
let res = String(describing: result)
if res.count<17{
self.injectJS()
}else{
print(res)
}
}
})
}
}
The code works, however, when I run the app the screen is always black. Although I set up webView frame as w100xh100, if you add view = webView
inside method viewDidLoad()
you will see the webpage on the full screen which covers all other view elements.
Any suggestions?
swift webkit wkwebview
add a comment |
Is it still possible to launch WKWebView
out of view hierarchy for executing javascript? My goal is to find a picture on the internet and show it inside my app without flashing webView on the screen.
I have seen similar topics on StackOverflow, but all working solution doesn't work now..., at least for me.
Here is what I have so far
import UIKit
import WebKit
class ViewController: UIViewController, WKUIDelegate,WKNavigationDelegate {
var webView: WKWebView!
@IBOutlet weak var smallView: UIView!
var locationImage:String?
override func loadView() {
let webConfiguration = WKWebViewConfiguration()
webView = WKWebView(frame: CGRect(x: 0, y: 0, width: 100, height: 100), configuration: webConfiguration)
webView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
}
override func viewDidLoad() {
super.viewDidLoad()
webView.uiDelegate = self
webView.navigationDelegate = self
let myURL = URL(string:"https://www.google.ca/search?q=00.7732164,-10.334838")
let myRequest = URLRequest(url: myURL!)
webView.load(myRequest)
}
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
injectJS()
}
func injectJS(){
self.webView.evaluateJavaScript("document.getElementById('rso').getElementsByTagName('img')[0].src", completionHandler: { result, error in
if error == nil {
let res = String(describing: result)
if res.count<17{
self.injectJS()
}else{
print(res)
}
}
})
}
}
The code works, however, when I run the app the screen is always black. Although I set up webView frame as w100xh100, if you add view = webView
inside method viewDidLoad()
you will see the webpage on the full screen which covers all other view elements.
Any suggestions?
swift webkit wkwebview
add a comment |
Is it still possible to launch WKWebView
out of view hierarchy for executing javascript? My goal is to find a picture on the internet and show it inside my app without flashing webView on the screen.
I have seen similar topics on StackOverflow, but all working solution doesn't work now..., at least for me.
Here is what I have so far
import UIKit
import WebKit
class ViewController: UIViewController, WKUIDelegate,WKNavigationDelegate {
var webView: WKWebView!
@IBOutlet weak var smallView: UIView!
var locationImage:String?
override func loadView() {
let webConfiguration = WKWebViewConfiguration()
webView = WKWebView(frame: CGRect(x: 0, y: 0, width: 100, height: 100), configuration: webConfiguration)
webView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
}
override func viewDidLoad() {
super.viewDidLoad()
webView.uiDelegate = self
webView.navigationDelegate = self
let myURL = URL(string:"https://www.google.ca/search?q=00.7732164,-10.334838")
let myRequest = URLRequest(url: myURL!)
webView.load(myRequest)
}
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
injectJS()
}
func injectJS(){
self.webView.evaluateJavaScript("document.getElementById('rso').getElementsByTagName('img')[0].src", completionHandler: { result, error in
if error == nil {
let res = String(describing: result)
if res.count<17{
self.injectJS()
}else{
print(res)
}
}
})
}
}
The code works, however, when I run the app the screen is always black. Although I set up webView frame as w100xh100, if you add view = webView
inside method viewDidLoad()
you will see the webpage on the full screen which covers all other view elements.
Any suggestions?
swift webkit wkwebview
Is it still possible to launch WKWebView
out of view hierarchy for executing javascript? My goal is to find a picture on the internet and show it inside my app without flashing webView on the screen.
I have seen similar topics on StackOverflow, but all working solution doesn't work now..., at least for me.
Here is what I have so far
import UIKit
import WebKit
class ViewController: UIViewController, WKUIDelegate,WKNavigationDelegate {
var webView: WKWebView!
@IBOutlet weak var smallView: UIView!
var locationImage:String?
override func loadView() {
let webConfiguration = WKWebViewConfiguration()
webView = WKWebView(frame: CGRect(x: 0, y: 0, width: 100, height: 100), configuration: webConfiguration)
webView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
}
override func viewDidLoad() {
super.viewDidLoad()
webView.uiDelegate = self
webView.navigationDelegate = self
let myURL = URL(string:"https://www.google.ca/search?q=00.7732164,-10.334838")
let myRequest = URLRequest(url: myURL!)
webView.load(myRequest)
}
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
injectJS()
}
func injectJS(){
self.webView.evaluateJavaScript("document.getElementById('rso').getElementsByTagName('img')[0].src", completionHandler: { result, error in
if error == nil {
let res = String(describing: result)
if res.count<17{
self.injectJS()
}else{
print(res)
}
}
})
}
}
The code works, however, when I run the app the screen is always black. Although I set up webView frame as w100xh100, if you add view = webView
inside method viewDidLoad()
you will see the webpage on the full screen which covers all other view elements.
Any suggestions?
swift webkit wkwebview
swift webkit wkwebview
asked Nov 13 '18 at 0:26
Virtual DeviceVirtual Device
297
297
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
I haven't worked with WKWebView so I was just following the example and turned out the problem was in loadView()
. After reading the documentation I just moved all from loadView()
to viewDidLoad()
.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53272052%2fexecute-javascript-in-wkwebview-outside-of-the-screen%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
I haven't worked with WKWebView so I was just following the example and turned out the problem was in loadView()
. After reading the documentation I just moved all from loadView()
to viewDidLoad()
.
add a comment |
I haven't worked with WKWebView so I was just following the example and turned out the problem was in loadView()
. After reading the documentation I just moved all from loadView()
to viewDidLoad()
.
add a comment |
I haven't worked with WKWebView so I was just following the example and turned out the problem was in loadView()
. After reading the documentation I just moved all from loadView()
to viewDidLoad()
.
I haven't worked with WKWebView so I was just following the example and turned out the problem was in loadView()
. After reading the documentation I just moved all from loadView()
to viewDidLoad()
.
answered Nov 13 '18 at 13:50
Virtual DeviceVirtual Device
297
297
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53272052%2fexecute-javascript-in-wkwebview-outside-of-the-screen%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown