我想调用一个带有回调的函数,其中包含来自 vaadin 组件的多行 javascript 代码。
当我使用
getElement().executeJs(...)
或 UI.getCurrent().getPage().executeJs(...)
并传递代码时,仅执行第一行。
这是一个仅调用第一个 alert 的示例。有没有办法从java调用所有行?
@NpmPackage(value = "leaflet-image", version = "0.4.0")
@JsModule("leaflet-image/leaflet-image.js")
@Tag("leaflet-image")
public class LLeafletImage extends Div {
private static final long serialVersionUID = 1L;
public void print(LMap map) {
UI.getCurrent().getPage().executeJs("alert('-1');"
+ "leafletImage($0, function(err, canvas) {"
+ "alert('0');"
+ "var img = document.createElement('img');"
+ "var dimensions = map.getSize();"
+ "img.width = dimensions.x;"
+ "img.height = dimensions.y;"
+ "img.src = canvas.toDataURL();"
+ "document.getElementById('images').innerHTML = '';"
+ "document.getElementById('images').appendChild(img);"
+ "});"
+ "alert('2');", map.clientComponentJsAccessor());
}
}
我发现executeJs() 可以并且确实执行多行javascript 代码。但如果执行过程中出现错误,脚本就会被中断。