您可以在Applet和
页面上的任何javascript方法之间进行全面交流。Kyle在一篇很好的文章中演示了Javascript如何调用
小程序并请求文本值。但是,我假设您希望HTML
文本字段在每次单击鼠标时都更新,这意味着该applet需要
与页面进行通信。我会将您的Javascript修改为
以下形式:
var activetextarea = null;$('textarea, input').click(function() { $(this).dasher(); activetextarea = this;});function updateText(text) { // Careful: I think textarea and input have different // methods for setting the value. Check the // jQuery documentation $(activetextarea).val(text); }假设您拥有该applet的源代码,则可以使其与
上述javascript函数通信。添加此导入:
import netscape.javascript.JSObject;
然后,在您具有用于鼠标单击的onClick处理程序中,添加:
// After the Applet Text has been updatedJSObject win = null;try { win = (JSObject) JSObject.getWindow(Applet.this); win.call("updateText", new Object[] { textBox.getText() });} catch (Exception ex) { // oops}每次调用代码块时,这都会更新文本。如果您
无权访问applet源,那么事情将变得更加棘手。您需要设置
某种方式的javascript超时,该方式会不断从
applet读取值,但是这假定applet具有返回
文本框值的方法。
另请参见:http : //java.sun.com/products/plugin/1.3/docs/jsobject.html
更新修改小程序是您的最佳选择,因为这
将触发任何事件。例如,如果您希望HTML TextField
在每次单击时都发生更改,则该单击发生在applet中,
如上所述,您需要对其进行修改以触发更新。不修改
小程序,我看到两个选择。选项#1使用计时器:
var timer;var activetextarea;$('textarea, input').click(function() { $(this).dasher(); activetextarea = this; updateText();}function updateText() { // Same warnings about textarea vs. input $(activetextarea).val($('#appletId')[0].getCurrentEditBoxText()); timer = setTimeout("updateText()", 50);}function stopUpdating() { clearTimeout(timer);}这类似于上面的代码,不同之处在于单击文本区域会触发
循环功能updateText(),该功能将
每隔50ms将HTML文本字段的值设置为Applet文本字段的值。这可能会
在点击和更新之间引入较小的延迟,但是它会很小。您可以
增加计时器频率,但这会增加性能消耗。我看
不到“隐藏”小程序的位置,但是应该调用相同的函数,
stopUpdating以便我们不再试图联系隐藏的小程序。
选项#2(未编码)
我将尝试捕获Applet
在HTML Dom中冒出的点击。然后,您可以跳过计时器,将click()行为放在
Applet容器上以进行相同的更新。但我不确定此类事件是否会
冒泡,因此不确定是否会奏效。即使是这样,我也不知道
它在各个浏览器之间的兼容性如何。
选项#3
第三种选择是不要在每次单击时更新HTML文本字段。这
仅仅是Kyle和我在上面的帖子的结合,以便
在您每次用applet“完成”时设置文本字段的值。



