Невозможно вставить приложение Javascript на веб-сайт Vaadin - PullRequest
1 голос
/ 15 апреля 2019

В настоящее время я расширяю этот (https://github.com/frankskol/AdaptiveTesting2/tree/master) сайт адаптивного тестирования, который использует Vaadin 7 для включения режима с вопросами из Geogebra. Соответствующие классы здесь - DefaultView и GeogebraTestView. Проблема в том, что я не могу получить приложение дляВыполнить. Согласно вики Geogebra (https://wiki.geogebra.org/en/Reference:GeoGebra_Apps_Embedding), есть четыре шага для встраивания приложения.

1) Добавить информацию к мета в разделе заголовка

2) Включить библиотеку javascript deployggb.js

3) Создайте элемент для приложения GeoGebra на своей странице

4) Настройте и вставьте приложение

Моя проблема на шаге 4, так как я не могу получитьисполняемый Javascript.

Шаги 1 и 2 уже выполнены в defaultView в методе servletInitialized().И библиотека, и мета-конфигурации можно увидеть в начале.Для шага 3 я создал новую метку с div и добавил ее.Также можно увидеть в коде HTML, так что должно работать.Для шага 4 я создал строку со сценарием и попытался выполнить ее с 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, появившееся на странице, как видно из одного из примеров Live на вики Geogebra, но реальный результат - просто пустая страница.

1 Ответ

0 голосов
/ 16 апреля 2019

Возможно, проблема в том, что вы вызываете JS на ранней стадии (страница еще не загружена, компоненты не прикреплены).Я не уверен насчет Геогебры, но попробуйте выполнить ваш JavaScript на attachListener метки следующим образом:

Label lb=new Label();
lb.addAttachListener(e->{
JavaScript.getCurrent().execute("YOUR SCRIPT");
});

По крайней мере, общие команды JS, такие как JavaScript.getCurrent().execute("alert('Hello')");, должны работать оттуда.

...