I have a basic applet method timing problem with Firefox (and Chrome), not IE nor Opera. Works if JavaScript issues windows.alert() prior, fails otherwise.
I have an applet method, which is invoked from a JavaScript function, that is triggered by the window.onload event. The problem seems to center in the loading of the applet and its methods.
If I step through the 3 applet acceptance prompts (I chose to use a down-level Java), the applet method is never invoked, nor is an exception raised. How this happens is beyond my understanding.
As additional information, the Init(), start(), and "desired" Java methods all use the synchronized keyword. This is an attempt to minimize the exposure to a multi-thread environment.
If I issue a message from JavaScript (via window.alert()) PRIOR to invoking the method, I can get the desired results in special circumstances:
1) When the alert is presented, Firefox also prompts, SIMULTANEOUSLY, to block/continue the applet (the first of the 3 applet acceptance prompts). I can accept that these are separate threads.
2a) If I walk through the 3 applet acceptance prompts FIRST, and then hit the OK button on the alert message SECOND, I get the desired results, my applet method executes, and all is well (other than the fact that I would prefer not to have the alert in place at all).
2b) If I hit the OK button on the alert message FIRST, and then walk through the 3 applet acceptance prompts SECOND, I get the same results as when the page loads WITHOUT the alert, which is the applet method is never invoked, nor is an exception raised. Weird, huh?
The above problem only occurs when the browser and the applet's URL are loaded for the first time.
Subsequent invocations (after the page & applet has been loaded initially) do not have the failing symptoms.
It is my understanding that IE and Firefox (and Chrome and Opera, for that matter) each use the same implementation of JavaScript provided by Microsoft. Please correct me if this information is inaccurate.
The failing page and it's applet are proprietary; I cannot provide the Internet URL, nor the Java or JavaScript source, to aid in your analysis.
所有回复 (5)
Hi John_L, That is very strange, however with out an example, it may be difficult to reproduce this in a bug.
Your best bet is the Web compatibility team. They have a dedicated site for bugs like this. Try http://dev.webcompat.com
However check out the mutlithread support for the current Gecko engine in the next version: https://wiki.mozilla.org/Electrolysis But this may not work yet for the function you are describing.
I hope this at least puts you in the right direction.
I can speak to the source code, but have no access to it.
The current process/thread that invokes an applet method must check to see that the applet is not currently being loaded by another process/thread. If it is being loaded, the current process/thread should block until the load is complete, THEN attempt to invoke the applet method.
Please forward my concern to a knowledgable developer. The nature of the problem, once identified, can be addressed in a very straightforward manner.
Alternately, perhaps a workaround could be identified. I have tried to address the problem in JavaScript, but have been unsuccessful in my attempts.
Any workaround that could be used in the absense of a fix, would also be appreciated.
Thanks again
PS I have found the suggested link (http://dev.webcompat.com/) results in a Bad Gateway error page.
由John_L于
PS I've found the link (http://dev.webcompat.com/) unusable, as it results in a Bad Gateway error page.
John_L they changed the url try coping this into the url http://webcompat.com/