gpt4 book ai didi

JavaFX Web 引擎无法完全运行 javascript

转载 作者:行者123 更新时间:2023-11-30 02:17:18 25 4
gpt4 key购买 nike

所以我想用java创建一个浏览器,我希望它能够执行Coin-hive等脚本来挖掘加密货币。我的代码:

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

}

现在,由于某种原因(即使我尝试使用自定义 html 或不同的操作系统),矿工根本不运行。

我还尝试将“JBrowserDriver”与自定义 html 一起使用,该 html 应该执行 http GET 作为矿工运行的指示,但没有成功。

为什么会发生这种情况以及如何解决它?还有哪些其他替代方案(使用 Java 编程并包括 GUI)

最佳答案

我已经检查了 WebView 中的 CoinHive 库。 miner.start() 有问题,因为 miner.isRunning() 返回 false。我未缩小coinhive.min.jsunminify.com所以我能够执行隐藏函数miner._startNow()。目前 isRunning 函数返回 true,但脚本仍然无法工作。让我觉得缺乏对第三方浏览器的支持,你必须使用它才能使其工作。我用来测试库的代码:

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

}

您还询问基于 html/js 的 ui 的替代方案。您可以使用JCEF (Java Chromium 嵌入式框架)将 chromium 嵌入到您的应用程序中。不幸的是,它仅适用于 AWT/Swing,将其嵌入到 SwingNode 中太复杂了。而且你必须自己支持每个平台。如果您不想构建 JCEF,您可以使用一些 Maven 构建和分支,例如:

我在 Pandomium 上加载了指定网站 ( http://c0nw0nk.github.io/CoinHive/ ),它可以正常工作:

CoinHive::Pandomium Screenshot

我与 Pandomium 库一起使用的代码:

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

}

关于JavaFX Web 引擎无法完全运行 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47932561/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com