我正在使用
JavaFX应用程序,其中包含由内部webkit浏览器呈现的几个html,css,JS文件.现在,问题是CSS动画在JavaFX提供的webkit浏览器中没有得到顺利的呈现,但Firefox或chrome中的相同代码却相当平滑.
此外,没有持久性可用(目前在Java中使用变量,并通过JS进行持久性通信).
我正在寻找的是有任何方法来整合一些无头浏览器,或一些设置,使CSS动画更流畅.只有我遇到的是JxBrowser,但是对于个人使用来说太贵了.
代码:
- public class Main extends Application {
- private Scene scene;
- MyBrowser myBrowser;
- String completeText = "";
- @Override
- public void start(Stage primaryStage) throws Exception{
- primaryStage.setTitle("Frontend");
- java.net.CookieManager manager = new java.net.CookieManager();
- java.net.CookieHandler.setDefault(manager);
- myBrowser = new MyBrowser();
- scene = new Scene(myBrowser,1080,1920);
- primaryStage.setScene(scene);
- primaryStage.setFullScreen(true);
- primaryStage.show();
- // @ being the escape character
- scene.setOnKeyTyped(new EventHandler<KeyEvent>() {
- @Override
- public void handle(KeyEvent event) {
- String text = event.getCharacter();
- if (text.equals("0")) {
- String tempText = completeText;
- completeText = "";
- processText(tempText);
- }else {
- completeText = completeText+text;
- }
- }
- });
- }
- }
MyBrowser:
- public class MyBrowser extends Region {
- public MyBrowser() {
- webEngine.getLoadWorker().stateProperty().addListener((observable,oldValue,newValue) -> {
- if (newValue == Worker.State.SUCCEEDED) {
- JSObject window = (JSObject) webEngine.executeScript("window");
- window.setMember("app",this);
- }
- });
- URL urlHello = getClass().getResource(hellohtml);
- webEngine.load(urlHello.toExternalForm());
- webView.setPrefSize(1080,1920);
- webView.setContextMenuEnabled(false);
- getChildren().add(webView);
- }
包含动画的CSS代码:
- #ball-container.go #ball{
- -webkit-animation: rotating-inverse 2s ease-out 0s 1 normal;
- animation: rotating-inverse 2s ease-out 0s 1 normal;
- }
- #ball-container {
- height: 102px;
- width: 102px;
- position: absolute;
- top: -95px;
- left: 480px;
- -webkit-transition: all 0.9s ease-in-out 0s;
- transition: all 0.9s ease-in-out 0s;
- }
- #ball-container.shake .ball-wrapper{
- -webkit-animation: yAxis 0.9s ease-in-out;
- animation: yAxis 0.9s ease-in-out;
- }
谢谢.
解决方法
尝试使用
Java 8u112,基于您的代码,我创建了一个工作示例(使用Java JDK 8u112 64位测试):
- import javafx.application.Application;
- import javafx.scene.Parent;
- import javafx.scene.Scene;
- import javafx.scene.web.WebEngine;
- import javafx.scene.web.WebView;
- import javafx.stage.Stage;
- public class Example extends Application
- {
- public static void main(String[] args)
- {
- launch(args);
- }
- class MyBrowser extends Parent
- {
- private WebEngine webEngine;
- private WebView webView;
- public MyBrowser()
- {
- webView = new WebView();
- webEngine = webView.getEngine();
- // Ugly (but easy to share) HTML content
- String pageContents =
- "<html>"
- + "<head>"
- + "<style>"
- + "@-webkit-keyframes mymove {"
- + "from {top: 0px;}"
- + "to {top: 50px;}"
- + "}"
- + ".Box { "
- + "width: 150px; "
- + "position: relative; "
- + "height: 150px; "
- + "background: red; "
- + "margin-top: 35px; "
- + "margin-left: auto; "
- + "margin-right: auto; "
- + "-webkit-transition: background-color 2s ease-out; "
- + "-webkit-transition: all 1s ease-in-out; "
- + "}"
- +".Box:hover {"
- +" background-color: green;"
- + "width:350px;"
- + "-webkit-animation: mymove 1s infinite;"
- +"}"
- + "</style>"
- + "</head>"
- + "<body>"
- + "<div class='Box'></div>"
- + "</body>"
- + "</html>";
- webEngine.loadContent(pageContents);
- webView.setContextMenuEnabled(false);
- getChildren().add(webView);
- }
- }
- private Scene scene;
- MyBrowser myBrowser;
- @Override
- public void start(Stage primaryStage) throws Exception
- {
- primaryStage.setTitle("Frontend");
- myBrowser = new MyBrowser();
- scene = new Scene(myBrowser);
- primaryStage.setScene(scene);
- primaryStage.show();
- }
- }
我怀疑这是因为他们现在正在使用一个较新的webkit JDK-8156698,但它可能是以前的错误(可以看看8u112 bug fixes列表.