0
我需要在JavaScript执行开始之前(或至少在触发document.onready
之前)注入一个桥对象。最常见的解决方案并没有提供它:在页面加载时注入JS <-> JavaFX bringe到WebView
engine.getLoadWorker().getStateProperty().addListener(new ChangeListener<State> {
@Override
public void changed(ObservableValue<? extends State> val, State oldV, State newV) {
if (newV == State.SUCCEEDED) {
System.out.println("getLoadWorker.stateProperty changed to " + newV + ", injecting an API!");
((JSObject) engine.executeScript("window")).setMember("api", new SomeApi());
}
}
});
但一个简单的测试情况表明之前的状态转换恰巧javascipt的被称为:
alert("Loaded! typeof(api) == '" + typeof(api) + "'");
$(document).ready(function() {
alert("Ready! typeof(api) == '" + typeof(api) + "'");
});
此示例。OUPUTS类似:
[JS alert] Loaded! typeof(api) == 'undefined'
[JS alert] Ready! typeof(api) == 'undefined'
getLoadWorker.stateProperty changed to SUCCEEDED, injecting an API!
另一个建议的答案(https://stackoverflow.com/a/28414332/1848172)似乎工作,但看起来像一个丑陋的黑客。有没有干净的解决方案?