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:
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));
}
}