2009-11-16 71 views
0

我想要做的是在PostBack的ASP.NET页面之后立即调用Java Applet方法。为了做到这一点,我使用了ScriptManager.RegisterStartupScript函数,该函数通过一个小脚本块调用页面中的一个函数,然后调用Applet函数。它似乎是多步骤的,但如果我只是尝试从后面的代码中编写的脚本块中调用Applet函数,那么我什么也得不到。我实际上已经实现了我之后的结果,但只有当我第一次将JavaScript警报放入由脚本块后面的代码调用的函数中时。从RegisterStartupScript调用Applet函数

问题是否有人知道如何解决必须在Applet函数被调用之前触发警报?

下面是一些简化的伪代码,以更好地描述场景。

(.ascx.cs - yes this is in a user control, perhaps that is problematic?) 
protected void SetupAppletInput() 
{ 
    string scriptBlock = CreateJavaScriptBlock(dataForApplet); 
    ScriptManager.RegisterStartupScript(grvDataSet, grvDataSet.GetType(), "clicky", scriptBlock, true); 
} 
protected string CreateJavaScriptBlock(String dataForApplet) 
{ 
    StringBuilder sb = new StringBuilder(); 
    sb.Append("CallAppletFunction(dataForApplet);"); 
    return sb.ToString(); 
} 

(.ascx) 

    function CallAppletFunction(dataForApplet) 
    { 
     alert("Calling applet function"); // with this line in it works, but is really annoying to have to click the alert off for every PostBack 
     document.ReallyCoolApplet.functionToCall(dataForApplet); 
    } 



外面的这一点,我相信只有相关的事实是,该网页的部分被调回是一个UpdatePanel,但小程序本身不是一个更新面板,我相信它不是”不会重新加载。

希望我能充分解释这一点。 感谢您对此的任何帮助/想法!

+0

如果您使用JavaScript计时器来延迟对CallAppletFunction的调用,会发生什么情况?例如setTimeout('CallAppletFunction(dataForApplet)',1000) – Phaedrus 2009-11-16 18:13:26

+0

我试着在思考同样的事情,没有骰子的几个变化。我也尝试循环寻找Applet.IsActive()并在每个之间暂停1秒,并且它永不结束。我记得以前尝试检查IsActive()函数让我怀疑它,尽管如此我没有在其中放置很多股票。谢谢! – elo 2009-11-16 19:38:32

回答

0

迟了,但我最好的方法是从applet start方法中调用javascript。

然后,您应该可以从那里正确调用小程序。

这样做似乎有点多余,因为您始终可以让applet在start方法中正确执行某些操作。

这样你就不用担心等待一段时间,只要小程序加载它就会触发启动方法。