objective c - How to run WebView.mainFrame.loadRequest synchronously? -


in app i'm trying navigate given url using webview (non visible). however, loading web content happens asynchronously. later processing need wait until web content loaded (including redirections).

i experimented cfrunloopruninmode make wait (or timeout) cannot work available loop modes. kcfrunloopdefaultmode no redirection done , load request stops first address. mode kcfrunloopcommonmodes crashs after load request (swift code, don't have useful error information).

i have registered class frame load delegate know when loaded (even after multiple redirections). need make work while run loop active (it works nicely without). code:

  override func webview(sender: webview!, didstartprovisionalloadforframe frame: webframe!) {     jslogger.loginfo("==> start loading");   }    override func webview(sender: webview!, willperformclientredirecttourl url: nsurl!,     delay seconds: nstimeinterval, firedate date: nsdate!, forframe frame: webframe!) {       redirecting = true;   }    override func webview(sender: webview!, didcreatejavascriptcontext context: jscontext, forframe: webframe!) {     jslogger.loginfo("==> js create");   }    override func webview(sender: webview!, didfinishloadforframe frame: webframe!) {     if redirecting {       redirecting = false;       return;     }      jslogger.loginfo("==> navigating to: " + sender.mainframeurl);   }    override func webview(sender: webview!, didfailloadwitherror error: nserror!, forframe frame: webframe!) {     jslogger.logerror("navigating webpage failed error \(error.localizeddescription)")   } 

and here code load url runloop:

  func navigateandwait(location: string) -> string {     if let url = nsurl(string: location) {       redirecting = false;       webclient.mainframe.loadrequest(nsurlrequest(url: url));        let result: int = int(cfrunloopruninmode(kcfrunloopdefaultmode, 10, boolean(0)));       switch result {       case kcfrunlooprunfinished:         return "invalid run loop";        case kcfrunloopruntimedout:         return "call timed out";        case kcfrunlooprunstopped:         fallthrough;        default: // ok.         return "";       }     }     return "invalid url";    } 

what other ways exist make thread wait load request finish?

note: solution can given both obj-c , swift.

you can use performselector:onthread: in webviewdidfinishload: , didfailloadwitherror: perform task want when webview finishes load.


Comments

Popular posts from this blog

IF statement in MySQL trigger -

c++ - What does MSC in "// appease MSC" comments mean? -

javascript - Blogger related post gadget image Resize s72-c [ Need Expert Help ] -