`

JavaFX学习之Web

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

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

   PromptData
   WebEvent
   HTMLEditor
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics