一、场景复现

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相关推荐

  1. js的window对象与属性的使用

    1.BOM的概述     browser object modal :浏览器对象模型.     浏览器对象:window对象.     Window 对象会在 <body> 或 <f ...

  2. BOM的window对象的属性及其方法

    Window对象是客户端javascript最高层对象之一,只要打开浏览器窗口,不管该窗口中是否有打开的网页,当遇到BODY.FRAMESET或 FRAME元素时,都会自动建立window对象的实例. ...

  3. 前端:JS/24/BOM和DOM简介,for...in循环遍历,window对象的属性和方法,延时器,定时器,screen屏幕对象,location地址栏对象,history历史记录对象

    BOM 和DOM简介 BOM ,Browser Object Model ,浏览器对象模型: BOM主要提供了访问和操作浏览器各组件的方式: 浏览器组件:window(浏览器容器), location ...

  4. TWebBrowser 与 MSHTML(3): window 对象的属性、方法、事件纵览

    这还不是 TWebBrowser 控件的属性.方法.事件; 这和浏览器中 JavaScript 的 window 对象是基本一致的. window 对象是网页脚本中的顶层对象, 它代表网页的窗口.或一 ...

  5. Window对象的属性

    Window对象的window和self属性都指代当前窗口对象本身.可以使用这两个属性来显示引用当前窗口. 一.Location 对象 Location对象包含有关文档当前位置的信息. Locatio ...

  6. TypeScript 中为window对象添加属性

    众所周知,typescript是一款JavaScript的超集,其作用就是在于让我们开发者在艰辛的开发路途中,避免掉一些不必要的麻烦,这"一些不必要的麻烦"主要体现在于 TypeS ...

  7. SpringBean装配非主流用法——给已存在的对象设置属性

    2019独角兽企业重金招聘Python工程师标准>>> 适用情况: java代码里获得了一个对象,反序列化来的或者直接new的还是set进来的无所谓,这个对象依赖于Applicati ...

  8. ajax余额支付宝微信支付(多种情况调用同一个接口、jquery创建新对象设置属性)

    需求:需要用余额.支付宝.微信支付方式支付会员,余额支付显示余额其余支付不显示余额.余额点支付直接成功或失败,支付宝/微信支付弹出相应的二维码.支付接口为同一个,但要处理三种情况. 用到了ajax的c ...

  9. vue2使用$set()使对象新增属性后触发视图更新

    如图接口获取列表数组后,给每一个数组值插入一个自定义的属性,给一个默认值 后面需要修改插入的属性的值 修改后发现并未更改成功,值未改变.此时需要使用$set方法来出发数据的更新 this.$set(t ...

最新文章

  1. SAP BPC最佳实践-SAP BPC的OLAP引擎比较(MS OLAPBW OLAP)
  2. 利用dom4j取出XML文件中的数据
  3. 浏览器兼容console对象的简要解决方案
  4. 使用Mysql工具进行数据清洗
  5. 推荐系统组队学习——矩阵分解和FM
  6. win11WiFi驱动如何下载 windows11WiFi驱动下载的步骤方法
  7. matlab处理足球数据,如何用MATLAB画一个足球出来?
  8. 计算机网络(一)图解:计算机网络五层体系结构
  9. 直线插补和圆弧插补的区别
  10. 中国移动、联动、电信
  11. 超信Linux版(超信 for Linux下载) v1.3.0官方版
  12. pandas 数据读取与保存
  13. 字符串切割函数strtok、strtok_s、strtok_r的区别
  14. 浓情中秋,月满人团圆!联诚发祝您中秋快乐!
  15. 华为hcie认证体系华为华为hcie认证价值NSR不间断路由思科华为网工常备知识点解析ie-lab
  16. Linux Alsa
  17. 家庭医生签约健康管理服务系统平台解决方案
  18. arm-xm-linux交叉编译openssl
  19. 如何使用Python实现21点小游戏?
  20. c语言 保留两位小数

热门文章

  1. python监控键盘输入_Python实现监控键盘鼠标操作示例【基于pyHook与pythoncom模块】...
  2. csdn上修改字体的颜色
  3. ios realm 文件_iOS开发中使用Realm数据库
  4. 『软件工程13』浅谈面向对象方法,统一建模语言UML
  5. html中的时间代码怎么写,html网页代码中的时间样式怎样设置
  6. android交叉编译libxml2,Openwrt 交叉编译libxml2(示例代码)
  7. 树的存储结构-双亲表示法
  8. Θ(n)反转单链表(算法导论第三版第十章10.2-7)
  9. P6329 【模板】点分树 | 震波
  10. 牛客练习赛74 D CCA的图