Java FX WebView, Website nicht bedienbar

JanB

Mitglied
Hallo,

ich versuche folgende Website in einer WebView zu laden: https://appetize.io/embed/bp8h41ey0...deviceColor=white&debug=true&screenOnly=false
Das ist ein online iOS simulator, der auf HTML5 und Javascript basiert. Doch leider ist dieser Simulator in der WebView geöffnet nicht bedienbar, d.h. wenn man auf "Tap to Play" klickt passiert gar nichts.
Kann mir jemand helfen den Simulator in der WebView zum Laufen zu bringen bzw. gibt es Einstellungen die diese Nicht-Bedienbarkeit verursachen könnten?

Jan
 
Danke für die Antwort.
In der Dokumentation habe ich bereits nach Eigenschaften der WebView gesucht, die ein solches Verhalten erklären würden, aber ich ich bin nicht fündig geworden.

Jan
 
Hast du JavScript angeschaltet? Ich könnte mir vorstellen, dass das der Grund sein könnte.

Und die aktuellen Referenzen zur Doku sind
https://docs.oracle.com/javase/8/javafx/api/javafx/scene/web/WebView.html
https://docs.oracle.com/javase/8/javafx/api/javafx/scene/web/WebEngine.html
und ein Beispiel wäre
http://docs.oracle.com/javafx/8/webview/WebViewSample.java.htm

Die Links von oben sind veraltet, wenn auch inhaltlich sicherlich nicht komplett überholt (ich denke nicht, dass sich viel an der API getan hat, aber dennoch).

Wobei laut API:
public final void setJavaScriptEnabled(boolean value)
Sets the value of the property javaScriptEnabled.
Property description:
Specifies whether JavaScript execution is enabled.
Default value:
true
 
Ja, JS ist 100%ig aktiviert.
Die Dokumentationen und das Beispiel bringen mich bei meinem Problem leider auch nicht weiter, denn andere Webseiten sind problemlos aufruf- und benutzbar.

Jan
 
Hab es gerade auch mal getestet und alles funktioniert, bis auf das Canvas mit dem "Tap to Play"-Button. Ohne mir jetzt den Code von der WebSeite angeschaut zu haben, vermute ich, dass hier eine Restriktion vom verwendeten WebKit in JavaFX vorliegt.
Ich würde dir empfehlen, dass mal auf dem OpenJFX Bug-Tracker einzustellen, wenn du sicher bist, dass es ein Bug ist:
https://bugs.openjdk.java.net/secure/Dashboard.jspa

Ansonsten: StackOverflow mit kleinem Beispiel befüllen:

Main
Java:
package application;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class Main extends Application {
    @Override
    public void start(Stage stage) throws Exception {
        FXMLLoader loader = new FXMLLoader(getClass().getResource("WebViewTest.fxml"));
        Parent root = loader.load();
        Scene scene = new Scene(root, 1200, 800);
        stage.setScene(scene);
        stage.show();
    }
   
    public static void main(String[] args) {
        launch(args);
    }
}

FXML
HTML:
<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.*?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.web.WebView?>

<BorderPane xmlns:fx="http://javafx.com/fxml" fx:controller="application.WebViewTestController">
    <center>
        <WebView fx:id="webView"/> 
    </center>
</BorderPane>

Controller
Java:
package application;

import javafx.fxml.FXML;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import netscape.javascript.JSObject;

public class WebViewTestController {
   
    @FXML
    private WebView webView;
    private WebEngine webEngine = null;
   
    @FXML
    protected void initialize() {
        webEngine = webView.getEngine();
        webEngine.setUserAgent("AppleWebKit/537.44");
        webEngine.load(
                "https://appetize.io/embed/bp8h41ey07qv3wp2hfy7vh9wn4?device=iphone5s&orientation=portrait&scale=75&xdocMsg=true&deviceColor=white&debug=true&screenOnly=false");
        webEngine.getLoadWorker().stateProperty().addListener((observable, oldValue, newValue) -> {
            JSObject window = (JSObject) webEngine.executeScript("window");
            JavaBridge bridge = new JavaBridge();
            window.setMember("java", bridge);
            webEngine.executeScript("console.log = function(message)\n" 
                    + "{\n" 
                    + "    java.log(message);\n" 
                    + "};");
        });
    }
   
    public class JavaBridge {
        public void log(String text) {
            System.out.println(text);
        }
    }
}

Ich kann es also nachvollziehen, habe aber leider keine Zeit, es näher anzuschauen. Sorry.
Bitte zuerst StackOverflow und dann evtl. im Bug-Tracker erfassen.

Und wenn du es zum Laufen bekommst: Bitte hier mal die Lösung posten, falls es andere noch interessieren könnte...
 
Ich glaube, ich bin hier richtig. Wir wollen auf unsere Homepage einen rechner - so ne Art Tarifrechner oder so - einbauen. Damit sollen dann die Gäste bestimmte Türen auswählen können etc. und einen Preis zurück bekommen. Womit macht man das - Javascript, Python oder was anderes?

Ps: Ich kann etwas die Grundlagen von Java und Html.
 

Zurück
Oben