【发布时间】:2018-06-30 09:04:04
【问题描述】:
我正在制作一个使用 Webview 来显示本地 HTML 页面的 JavaFX 应用程序。将页面加载到Webview 后,通过调用JavaScript 函数open() 显示初始视频。该函数将onended 事件侦听器附加到<video> 元素。不幸的是,尽管playing 事件可以触发,但我无法触发onended 事件。
Javascript:
function open()
{
//set position
pos = 0;
//display the black, add video, play.
var video = document.getElementById('vid');
video.style.display = "block";
video.setAttribute('src', breakout);
video.load();
video.play();
//video.addEventListener("playing", clear, false);
video.addEventListener("ended", clear, false);
}
function clear()
{
alert("clear"); //was the method called?
//clear anything that was displayed.
document.getElementById('vid').style.display = "none";
document.getElementById('vid').setAttribute('src', "");
document.getElementById('image').style.display = "none";
document.getElementById('image').setAttribute('src', "");
//get next.
change();
}
Java:
public class WebviewController
{
@FXML
private WebView webView;
private WebEngine engine;
private State state;
@FXML
public void initialize()
{
engine = webView.getEngine();
engine.setJavaScriptEnabled(true);
engine.setOnAlert(new EventHandler<WebEvent<String>>()
{
@Override
public void handle(WebEvent<String> event)
{
Dialog<Void> alert = new Dialog<>();
alert.getDialogPane().setContentText(event.getData());
alert.getDialogPane().getButtonTypes().add(ButtonType.OK);
alert.showAndWait();
}
});
engine.load(getClass().getResource("/web/newhtml.html").toExternalForm());
afterLoad();
}
public void afterLoad()
{
engine.getLoadWorker().stateProperty().addListener(
new ChangeListener<Worker.State>()
{
@Override
public void changed(ObservableValue ov, Worker.State oldState, Worker.State newState)
{
if (newState == Worker.State.SUCCEEDED)
{
breakout();
}
}
});
}
public void breakout()
{
engine.executeScript("open()");
}
}
HTML:
<div class="col-8">
<div class="slideshow">
<video id="vid" src=""></video>
<img id="image" src='' alt="" />
</div>
</div>
我尝试将onended="clear()" 添加到视频元素中,看看是否是JavaScript 的Open() 方法有问题,但没有成功。我还尝试触发playing 事件(如评论),它有效。所以看来onended事件触发器有问题。
要让onended 事件起作用,我缺少什么?
【问题讨论】:
标签: javascript java javafx webview