Javafx webengine执行javascript时出现任意错误
我在swing应用程序上运行javafx 2.2.5的webengine时遇到问题,所以我想用webengine登录易趣,我可以做到,问题是有时候它在执行单击时会抛出javascript错误。这只是一小部分时间,通常可以正常工作。 让我们这样说:Javafx webengine执行javascript时出现任意错误,java,javafx-2,Java,Javafx 2,我在swing应用程序上运行javafx 2.2.5的webengine时遇到问题,所以我想用webengine登录易趣,我可以做到,问题是有时候它在执行单击时会抛出javascript错误。这只是一小部分时间,通常可以正常工作。 让我们这样说: final StackPane root = new StackPane(); WebView browser = new WebView(); WebEngine webEngine = browser.getEngine(); final
final StackPane root = new StackPane();
WebView browser = new WebView();
WebEngine webEngine = browser.getEngine();
final String url ="https://signin.ebay.co.uk/ws/eBayISAPI.dll?SignIn";
//load the url
webEngine.load(url);
final Scene scene = new Scene(root, 500, 400);
root.getChildren().add(browser);
//addlistener for state
webEngine.getLoadWorker().stateProperty().addListener(new ChangeListener() {
@Override
public void changed(ObservableValue ov, Object t, Object t1) {
Worker.State state = (Worker.State)t1;
if(state==Worker.State.SUCCEEDED){
Document doc = webEngine.getDocument();
Element u = (Element) doc.getElementById("userid");
u.setAttribute("value", username);
Element p = (Element)doc.getElementById("pass");
p.setAttribute("value", pass);
//now execute the click, as the load succeeded the button should be clickable
webEngine.executeScript("document.getElementById('but_sgnBt').click()");
}
}
});
大多数时候它都能正常工作,但有时由于未知的原因,它不能正常工作,我也尝试了一些变体,看看是否可以重新加载页面并重试,但每次它第一次出现错误时,其他调用(如reload()和load())都会继续出现相同的问题。
我试着这样做:
final StackPane root = new StackPane();
WebView browser = new WebView();
WebEngine webEngine = browser.getEngine();
String url ="https://signin.ebay.co.uk/ws/eBayISAPI.dll?SignIn";
//load the url
webEngine.load(url);
final Scene scene = new Scene(root, 500, 400);
root.getChildren().add(browser);
//addlistener for state
webEngine.getLoadWorker().stateProperty().addListener(new ChangeListener() {
@Override
public void changed(ObservableValue ov, Object t, Object t1) {
Worker.State state = (Worker.State)t1;
if(state==Worker.State.SUCCEEDED){
Document doc = webEngine.getDocument();
Element u = (Element) doc.getElementById("userid");
u.setAttribute("value", username);
Element p = (Element)doc.getElementById("pass");
p.setAttribute("value", pass);
//now execute the click, as the load succeeded the button should be clickable
try{
webEngine.executeScript("document.getElementById('but_sgnBt').click()");
}catch(Exception ex){
webEngine.getLoadWorker().cancel();
//with both is the same outcome
// webEngine.reload();
webEngine.load(url);
}
}
}
});
这样,如果第一次javascript执行失败,代码将继续循环,加载成功并抛出错误。无论如何,我尝试睡眠线程以查看问题是否是页面未完全加载,但这似乎不是问题,因为我可以看到状态成功时页面加载正确。
我花了相当多的时间在这方面,现在我没有更多的想法如何解决这个问题,甚至是什么问题,最糟糕的是,我必须尝试运行代码几次,直到我得到错误,这使得调试更加困难
所讨论的错误是:
netscape.javascript.JSException:TypeError:“null”不是com.sun.webpane.platform.WebPage.twkExecuteScript(本机方法)上的对象
那么我的问题是,有人知道为什么会发生这种情况吗?
还是解决这个问题的方法
非常感谢您是否有提及javascript错误的堆栈跟踪或错误消息?@Sergey Yes,netscape.javascript.JSException:TypeError:“null”不是com.sun.webpane.platform.WebPage.twkExecuteScript(本机方法)中的对象,我认为这是因为页面没有真正加载,所以javascript的执行失败,但我不是javascrip方面的专家。我找到了一个解决方案,但仍然想要其他解决方案。我的解决方案包括,如果浏览器登录失败(javascript),我基本上会销毁该实例并创建一个新实例,90%的时间都很好,这应该可以,但不是javafx解决方案,也不是很漂亮。更新,虽然我创建了一个新实例,但没有解决方法,仍然是一样的。在本例中,webbrowser包含在JFrame中。。