2017-12-21 14 views
0

So möchte ich einen Browser in Java erstellen und ich möchte es in der Lage sein, Skripte wie Coin-Hive zum Minen Kryptowährungen ausführen. Mein Code:JavaFX Web-Engine wird nicht vollständig ausgeführt Javascript

public class WebViewSample extends Application { 

    private Scene scene; 

    @Override 
    public void start(Stage stage) { 
     scene = new Scene(new Browser(),750,720, Color.web("#666970")); 
     stage.setScene(scene); 
     stage.show();//stage.setFullScreen(true); 
    } 

    public static void main(String[] args){ 
     launch(args); 
    } 

} 

class Browser extends Region { 

    final WebView browser = new WebView(); 
    final WebEngine webEngine = browser.getEngine(); 

    public Browser() { 
     webEngine.load("http://c0nw0nk.github.io/CoinHive/");//127.0.0.1/mine.html 
     getChildren().add(browser); 
    } 

} 

nun aus irgendeinem Grunde (auch wenn ich versuche, eigenen HTML oder anderes Betriebssystem zu verwenden), um den Bergmann gar nicht laufen.

Ich habe auch versucht, "JBrowserDriver" mit benutzerdefinierten HTML, die http GET als ein Zeichen für Bergmann ausführen sollte, ohne Erfolg ausführen sollte.

Warum passiert das und wie kann ich es beheben? Welche anderen Alternativen gibt es (programmiert mit Java und enthält GUI)

Antwort

1

Ich habe CoinHive Bibliothek in WebView überprüft. Es gibt ein Problem mit miner.start(), weil miner.isRunning() false zurückgibt. Ich habe coinhive.min.js mit unminify.com unminifiziert, also konnte ich versteckte Funktion miner._startNow() ausführen. Derzeit isRunning Funktion gibt True zurück, aber Skript funktioniert immer noch nicht. Bringt mich dazu zu denken, dass es keine Unterstützung für Browser von Drittanbietern gibt, und Sie müssen damit spielen, damit es funktioniert. Der Code, den ich verwendet, um zu testen Bibliothek:

public class CoinHive extends Application { 

    @Override 
    public void start(Stage primaryStage) throws Exception { 
     WebConsoleListener.setDefaultListener((webView, message, lineNumber, sourceId) -> { 
      System.out.println(message + "[at " + lineNumber + "]"); 
     }); 

     WebView webView = new WebView(); 
     WebEngine engine = webView.getEngine(); 
     engine.setJavaScriptEnabled(true); 

     engine.getLoadWorker().stateProperty().addListener((observable, oldValue, newValue) -> { 
      System.out.println(newValue); 
     }); 

     engine.getLoadWorker().exceptionProperty().addListener((observable, oldValue, newValue) -> { 
      newValue.printStackTrace(); 
     }); 

     StringBuilder codeBuilder = new StringBuilder("<script src='https://coinhive.com/lib/coinhive.min.js'></script>"); 
     codeBuilder.append("<script>window.onload = function() { var miner = new CoinHive.Anonymous('6Y2vO0GuPf3nInwjZfxSHdwE8gKUHsLE', {throttle:0.1,threads:1});"); 
     codeBuilder.append("miner.start(); console.log(miner.isRunning()); };"); 
     codeBuilder.append("</script>"); 
     engine.loadContent(codeBuilder.toString()); 

     Scene scene = new Scene(webView, 600, 300); 
     primaryStage.setScene(scene); 
     primaryStage.setTitle("CoinHive WebView"); 
     primaryStage.show(); 
    } 

} 

Sie sind auch über eine Alternative für html/js fragen basiert ui. Sie können JCEF (Das Java Chromium Embedded Framework) verwenden, um Chrom in Ihre Anwendung einzubetten. Leider funktioniert es nur mit AWT/Swing, es ist zu kompliziert, es in SwingNode einzubetten und Sie müssen jede Plattform auf eigene Faust unterstützen. Wenn Sie JCEF nicht bauen wollen, können Sie einige Maven baut und Gabeln wie:

Ich lud die angegebene Website (http://c0nw0nk.github.io/CoinHive/) auf Pandomium und es funktioniert:

CoinHive::Pandomium Screenshot

Der Code, den ich mit der Pandomium-Bibliothek verwendet habe:

public class CoinHive extends JFrame { 

    public CoinHive(PandomiumBrowser browser) { 
     super.setSize(1560, 780); 
     super.setTitle("CoinHive"); 
     super.getContentPane().add(browser.toAWTComponent(), BorderLayout.CENTER); 
     super.setVisible(true); 
    } 

    public static void main(String[] args) throws Exception { 
     PandomiumSettings settings = PandomiumSettings.getDefaultSettings(); 

     Pandomium pandomium = new Pandomium(settings); 
     pandomium.initialize(); 

     PandomiumClient client = pandomium.createClient(); 
     PandomiumBrowser browser = client.loadURL("http://c0nw0nk.github.io/CoinHive/"); 

     SwingUtilities.invokeLater(() -> new CoinHive(browser)); 
    } 

} 
Verwandte Themen