Execute javascript in WKWebView outside of the screen












0















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?










share|improve this question



























    0















    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?










    share|improve this question

























      0












      0








      0








      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?










      share|improve this question














      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






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 13 '18 at 0:26









      Virtual DeviceVirtual Device

      297




      297
























          1 Answer
          1






          active

          oldest

          votes


















          0














          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().






          share|improve this answer























            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
            });


            }
            });














            draft saved

            draft discarded


















            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









            0














            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().






            share|improve this answer




























              0














              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().






              share|improve this answer


























                0












                0








                0







                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().






                share|improve this answer













                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().







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 13 '18 at 13:50









                Virtual DeviceVirtual Device

                297




                297






























                    draft saved

                    draft discarded




















































                    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.




                    draft saved


                    draft discarded














                    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





















































                    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







                    Popular posts from this blog

                    Florida Star v. B. J. F.

                    Danny Elfman

                    Lugert, Oklahoma