我目前正在扩展这个(https://github.com/frankskol/AdaptiveTesting2/tree/master)自适应测试站点,该站点使用Vaadin 7包含一个包含Geogebra问题的模式。这里的相关类是DefaultView和GeogebraTestView。问题是我无法运行该应用程序。 根据Geogebra Wiki(https://wiki.geogebra.org/en/Reference:GeoGebra_Apps_Embedding),应用嵌入有四个步骤。
1)在顶部添加元信息
2)包括JavaScript库deployggb.js
3)在页面上为GeoGebra应用程序创建一个元素
4)配置并插入应用
我的问题出在步骤4上,因为我无法执行Javascript。
步骤1和2已在servletInitialized()
方法的defaultView中完成。库和元配置都可以在头部看到。
对于步骤3,我创建了一个带有div
的新Label并将其添加。在代码HTML中也可以看到,因此应该可以正常工作。
对于第4步,我使用脚本创建了一个String并尝试使用Page.getCurrent().getJavaScript().execute(script.toString());
执行它,如下所示:https://vaadin.com/forum/thread/791748/how-to-add-javascript-file-and-in-script-tags
但是,该应用程序仍未出现在页面上。
JavaScript.getCurrent().execute("alert('Hello')");
也不起作用,另一个解决方案getApplication().getMainWindow().executeJavaScript(script.toString());
在这里似乎不起作用,因为该程序无法识别getApplication
或getMainWindow()
。
Label ggbElement = new Label("<div id=\"ggb-element\"></div>",ContentMode.HTML);
addComponent(ggbElement);
StringBuilder script = new StringBuilder();
script.append("var ggbApp = new GGBApplet({\"appName\": \"graphing\", \"width\": 800, \"height\": 600, \"showToolBar\": true, \"showAlgebraInput\": true, \"showMenuBar\": true }, true);")
.append(" window.addEventListener(\"load\", function() { ggbApp.inject('ggb-element');\n" +
" });");
//execute Javascript
JavaScript.getCurrent().execute(script.toString());
//or
//Page.getCurrent().getJavaScript().execute(script.toString());
预期的结果将是页面上显示的Geogebra应用程序,如Geogebra Wiki上的实时示例之一所示,但实际结果只是空白页面。
答案 0 :(得分:0)
问题可能是您正在尽早调用JS(该页面尚未加载,未连接任何组件)。
我不确定Geogebra,但是尝试在Label的attachListener
上执行JavaScript,如下所示:
Label lb=new Label();
lb.addAttachListener(e->{
JavaScript.getCurrent().execute("YOUR SCRIPT");
});
至少,像JavaScript.getCurrent().execute("alert('Hello')");
这样的通用JS命令应该从那里开始工作。