Why can't you just let webview evaluate the JavaScript?
On 18 January 2012 15:18, tatebn <[email protected]> wrote: > I need the semaphore to hold there so that the return doesn't happen > until the value is sent back from javascript. How do I get the web > view to continue evaluating the javascript in the background? > > > > On Jan 18, 10:05 am, Daniel Drozdzewski <[email protected]> > wrote: >> Your semaphore allows ZERO passes through, in which case you have to >> release first. >> >> Either change the parameter to Semaphore constructor or release before >> calling Semaphore.acquire() >> >> Daniel >> >> On 18 January 2012 15:00, tatebn <[email protected]> wrote: >> >> >> >> >> >> >> >> >> >> > By the way, this code is located in a subclassed WebView. >> >> > On Jan 18, 9:53 am, tatebn <[email protected]> wrote: >> >> I'm trying to evaluate javascript with a semaphore lock. I need to >> >> query some web content about which context menus to show and need it >> >> to be synchronous. When I try to acquire the semaphore the thread >> >> locks without the javascript being evaluated and my javascript >> >> interface method being called. >> >> >> Here's my code. >> >> >> private Semaphore returnSemaphore = new Semaphore(0); >> >> private String returnValue; >> >> >> public String getJSValue(String expression) >> >> { >> >> String code = >> >> "javascript:_JSEval.setValue((function(){try{return " >> >> + expression >> >> + "+\"\";}catch(js_eval_err){return '';}})());"; >> >> //String code = "javascript: alert('here');"; >> >> Log.d(TAG, "eval: " + code); >> >> >> this.loadUrl(code); >> >> >> try { >> >> Log.d(TAG, "eval: about to acquire semaphore, " + >> >> returnSemaphore.availablePermits()); >> >> >> returnSemaphore.acquire(); >> >> >> Log.d(TAG, "past semaphore acquire"); >> >> >> return returnValue; >> >> } catch (InterruptedException e) { >> >> Log.e(TAG, "eval: Interrupted", e); >> >> } >> >> return null; >> >> >> } >> >> >> @SuppressWarnings("unused") >> >> private class JSEval >> >> { >> >> public void setValue(String value) >> >> { >> >> Log.i(TAG, "eval: in set value"); >> >> //if (value != null) { >> >> returnValue = value; >> >> //} >> >> returnSemaphore.release(); >> >> } >> >> } >> >> >> If I remove the semaphore acquire call, I get a result in setValue, so >> >> I know the interface is working. >> >> > -- >> > You received this message because you are subscribed to the Google >> > Groups "Android Developers" group. >> > To post to this group, send email to [email protected] >> > To unsubscribe from this group, send email to >> > [email protected] >> > For more options, visit this group at >> >http://groups.google.com/group/android-developers?hl=en >> >> -- >> Daniel Drozdzewski > > -- > You received this message because you are subscribed to the Google > Groups "Android Developers" group. > To post to this group, send email to [email protected] > To unsubscribe from this group, send email to > [email protected] > For more options, visit this group at > http://groups.google.com/group/android-developers?hl=en -- Daniel Drozdzewski -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en

