JavaFX学习之Web

[b]PopupFeatures[/b] 处理新窗口
[b]WebHistory[/b]
网页一般都带有历史记录的功能,可以回退,也可以前进,fx用WebHistory处理。
final WebHistory wh = webEngine.getHistory();   //获取webhistory
go(int offset) //跳到相对应的页,一般-1是后退,1是前进
getCurrentIndex() //获取当前页索引,开始页索引为0,点击进入下一页此时为1。

[b]WebView[/b] [b]WebEngin[/b]
WebView作为一个node用于显示网页内容
WebView webView = new WebView();

WebEngine用于对网页的操作,通过webView获取web引擎
WebEngine webEngine = webView.getEngine();
WebEngine的一些方法

webEngine.load(java.lang.String url); //加载一个网页
webEngine.executeScript(java.lang.String script) //执行网页中的脚本语言

看个demo
	public void init(Group root){
VBox box = new VBox();
WebView webView = new WebView();
final WebEngine webEngine = webView.getEngine();
webEngine.load("http://forums.oracle.com/forums/");
box.getChildren().add(webView);
Button button = new Button("showAll");
button.setOnAction(new EventHandler<ActionEvent>() {

@Override
public void handle(ActionEvent arg0) {
webEngine.executeScript("showAll()");
}
});
box.getChildren().add(button);
root.getChildren().add(box);
}

这里要注意的是,脚本必须是你网页中存在的。

可以在Application中执行网页中的脚本,那么也可以在网页脚本中执行Application方法
JSObject win = (JSObject) webEngine.executeScript("window");  获取js对象
win.setMember("app", new JavaApp()); 然后把应用程序对象设置成为js对象
private class JavaApp {
public void exit() {
Platform.exit();
}
public void login(){
System.out.println("login...");
}
}

此时在页面可以调用
<a href="about:blank" onclick="app.exit()">Exit the Application</a>


在网页上右键点击的时候,可以选择在新窗口打开,此时你必须自己设定。
setCreatePopupHandler(Callback<PopupFeatures,WebEngine> handler)  //处理弹出窗口。
webEngine.setCreatePopupHandler(
new Callback<PopupFeatures, WebEngine>() {
@Override public WebEngine call(PopupFeatures config) {
return newWebView.getEngine();
}
}
);

网页是通过WebView显示的,所以当你需要一个新窗口时,你必须弄一个新的webView,并为该webview设置好显示的位置,然后在上面的代码中获取该webview的webengine返回。

发现加载web页面需要一段时期,此时application的一些节点显示出来了,若是想让节点显示和web一起显示,则可以监听webEngine的状态属性。
webEngine.getLoadWorker().stateProperty().addListener(
new ChangeListener<State>() {
@Override
public void changed(ObservableValue<? extends State> ov,
State oldState, State newState) {
if (newState == State.SUCCEEDED) {
//添加节点,或者把app注入到网页脚本当中
}
}
}
);

看个demo:
	public void init(Group root){
final TabPane tp = new TabPane();
WebView webView = new WebView();
System.out.println(root.getScene());
webView.prefWidthProperty().bind(root.getScene().widthProperty());
webView.prefHeightProperty().bind(root.getScene().heightProperty());
final WebEngine webEngine = webView.getEngine();
webEngine.load("http://forums.oracle.com/forums/");
webEngine.setCreatePopupHandler(new Callback<PopupFeatures, WebEngine>() {

@Override
public WebEngine call(PopupFeatures arg0) {
WebView newWebView = new WebView();
WebEngine newWebEngine = newWebView.getEngine();
Tab tab = new Tab("new Window");
tab.textProperty().bind(newWebEngine.titleProperty());
tab.setContent(newWebView);
tp.getTabs().add(tab);
return newWebEngine;
}
});
final Tab tab = new Tab();
tab.textProperty().bind(webEngine.titleProperty());
tab.setContent(webView);
// process page loading
webEngine.getLoadWorker().stateProperty().addListener(
new ChangeListener<State>() {
@Override
public void changed(ObservableValue<? extends State> ov,
State oldState, State newState) {
if (newState == State.SUCCEEDED) {
tp.getTabs().add(tab);
}
}
}
);
root.getChildren().add(tp);
}


[b]PromptData[/b]
[b]WebEvent[/b]
[b]HTMLEditor[/b]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值