Javafx的WebEgine执行window对象设置属性后为undefined
一、场景复现
window10 jdk1.8u221
package main;import javafx.application.Application;
import javafx.beans.value.ObservableValue;
import javafx.concurrent.Worker;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
import netscape.javascript.JSObject;import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;public class Main extends Application {@Overridepublic void start(final Stage stage) throws IOException {Button button = new Button("弹窗");button.setOnAction(event -> {try {this.createOtherStage();} catch (MalformedURLException e) {e.printStackTrace();}});StackPane stackPane = new StackPane();stackPane.getChildren().add(button);Scene scene = new Scene(stackPane,600,400);scene.setRoot(stackPane);stage.setScene(scene);stage.show();}A apps = new A();public void createOtherStage() throws MalformedURLException {Stage stage = new Stage();final WebView browser = new WebView();final WebEngine webEngine = browser.getEngine();StackPane stackPane = new StackPane();stackPane.getChildren().add(browser);Scene scene = new Scene(stackPane,600,400);String url = new File("./filePage.html").toURI().toURL().toString();webEngine.load(url);webEngine.getLoadWorker().stateProperty().addListener((ObservableValue<? extends Worker.State> ov, Worker.State oldState,Worker.State newState) -> {if (newState == Worker.State.SUCCEEDED) {JSObject win= (JSObject) webEngine.executeScript("window");win.setMember("apps",new A());//(1)//win.setMember("apps",apps);//(2)}});//browser.setContextMenuEnabled(false);scene.setRoot(stackPane);stage.setScene(scene);stage.show();}public static void main(String[] args) {launch(args);}public static class A{@Overridepublic String toString() {return "A{}";}}
}
filePage.html
<html>
<head><meta charset="UTF-8">
</head>
<body>
<div class="top"><button onclick="show()">查看</button><div id="info"></div>
</div>
</body>
<script>var apps = 'test';function show() {document.write("" + apps);}
</script>
</html>
A、运行输出:
undefined
期待输出:
A{}
B、注释掉(1)的代码输出:
test
C、注释掉(1)的代码,打开(2)的代码输出:
A{}
二、分析原因
apps没有被赋值,输出的是test而不是undefined。apps被赋值new A()输出的却是undefined。apps被赋值apps变量时输出的是A{}。可以得出结论就是GC把对象回收了。
Javafx的WebEgine执行window对象设置属性后为undefined相关推荐
- js的window对象与属性的使用
1.BOM的概述 browser object modal :浏览器对象模型. 浏览器对象:window对象. Window 对象会在 <body> 或 <f ...
- BOM的window对象的属性及其方法
Window对象是客户端javascript最高层对象之一,只要打开浏览器窗口,不管该窗口中是否有打开的网页,当遇到BODY.FRAMESET或 FRAME元素时,都会自动建立window对象的实例. ...
- 前端:JS/24/BOM和DOM简介,for...in循环遍历,window对象的属性和方法,延时器,定时器,screen屏幕对象,location地址栏对象,history历史记录对象
BOM 和DOM简介 BOM ,Browser Object Model ,浏览器对象模型: BOM主要提供了访问和操作浏览器各组件的方式: 浏览器组件:window(浏览器容器), location ...
- TWebBrowser 与 MSHTML(3): window 对象的属性、方法、事件纵览
这还不是 TWebBrowser 控件的属性.方法.事件; 这和浏览器中 JavaScript 的 window 对象是基本一致的. window 对象是网页脚本中的顶层对象, 它代表网页的窗口.或一 ...
- Window对象的属性
Window对象的window和self属性都指代当前窗口对象本身.可以使用这两个属性来显示引用当前窗口. 一.Location 对象 Location对象包含有关文档当前位置的信息. Locatio ...
- TypeScript 中为window对象添加属性
众所周知,typescript是一款JavaScript的超集,其作用就是在于让我们开发者在艰辛的开发路途中,避免掉一些不必要的麻烦,这"一些不必要的麻烦"主要体现在于 TypeS ...
- SpringBean装配非主流用法——给已存在的对象设置属性
2019独角兽企业重金招聘Python工程师标准>>> 适用情况: java代码里获得了一个对象,反序列化来的或者直接new的还是set进来的无所谓,这个对象依赖于Applicati ...
- ajax余额支付宝微信支付(多种情况调用同一个接口、jquery创建新对象设置属性)
需求:需要用余额.支付宝.微信支付方式支付会员,余额支付显示余额其余支付不显示余额.余额点支付直接成功或失败,支付宝/微信支付弹出相应的二维码.支付接口为同一个,但要处理三种情况. 用到了ajax的c ...
- vue2使用$set()使对象新增属性后触发视图更新
如图接口获取列表数组后,给每一个数组值插入一个自定义的属性,给一个默认值 后面需要修改插入的属性的值 修改后发现并未更改成功,值未改变.此时需要使用$set方法来出发数据的更新 this.$set(t ...
最新文章
- SAP BPC最佳实践-SAP BPC的OLAP引擎比较(MS OLAPBW OLAP)
- 利用dom4j取出XML文件中的数据
- 浏览器兼容console对象的简要解决方案
- 使用Mysql工具进行数据清洗
- 推荐系统组队学习——矩阵分解和FM
- win11WiFi驱动如何下载 windows11WiFi驱动下载的步骤方法
- matlab处理足球数据,如何用MATLAB画一个足球出来?
- 计算机网络(一)图解:计算机网络五层体系结构
- 直线插补和圆弧插补的区别
- 中国移动、联动、电信
- 超信Linux版(超信 for Linux下载) v1.3.0官方版
- pandas 数据读取与保存
- 字符串切割函数strtok、strtok_s、strtok_r的区别
- 浓情中秋,月满人团圆!联诚发祝您中秋快乐!
- 华为hcie认证体系华为华为hcie认证价值NSR不间断路由思科华为网工常备知识点解析ie-lab
- Linux Alsa
- 家庭医生签约健康管理服务系统平台解决方案
- arm-xm-linux交叉编译openssl
- 如何使用Python实现21点小游戏?
- c语言 保留两位小数
热门文章
- python监控键盘输入_Python实现监控键盘鼠标操作示例【基于pyHook与pythoncom模块】...
- csdn上修改字体的颜色
- ios realm 文件_iOS开发中使用Realm数据库
- 『软件工程13』浅谈面向对象方法,统一建模语言UML
- html中的时间代码怎么写,html网页代码中的时间样式怎样设置
- android交叉编译libxml2,Openwrt 交叉编译libxml2(示例代码)
- 树的存储结构-双亲表示法
- Θ(n)反转单链表(算法导论第三版第十章10.2-7)
- P6329 【模板】点分树 | 震波
- 牛客练习赛74 D CCA的图