【问题标题】:Loading local JavaScript file in WebView in Java 8u60在 Java 8u60 中的 WebView 中加载本地 JavaScript 文件
【发布时间】:2015-12-02 10:37:40
【问题描述】:

在 Java 8u51 之前,以下工作正常:

  • 有一个包含<script src="javascript.js"></script> 的 HTML 文件
  • 将此 HTML 文件加载到 WebView 中
  • 使用webView.getEngine().executeScript() 调用包含在javascript.js 中的函数

然而,切换到 8u60 后,它不再工作:

Exception in thread "JavaFX Application Thread" netscape.javascript.JSException: TypeError: undefined is not a function

所以文件javascript.js 不再加载。 它在从 IDE 启动时工作,其中 JavaScript 文件仅位于文件系统上。但是,它不再起作用,当应用程序被打包时,javascript.js 在 JAR 文件中。

知道发生了什么变化以及如何解决这个问题吗?

【问题讨论】:

  • 不是jdk/jre的问题,没有找到你的js文件(你可以在jar旁边找找试试),相信你设置的目标js文件路径错误跨度>
  • 为什么以前可以用,后来就不行了?
  • 因为IDE没有生成jar文件然后运行它,而你这样做,你需要指定javascript文件它是一个嵌入jar资源
  • “当应用程序打包时它不再工作”我的意思是它适用于 u51 但不适用于 u60 - 两者都从 JAR 文件运行。
  • 不是内容。将文件指定为 URL 而不是相对路径有效。

标签: java javafx-webengine


【解决方案1】:

从 Java 8u60 开始,在 html 文件中引用的本地 javascript 文件不再在 WebView 中执行。使用旧版本运行程序时,它仍然可以工作。 我没有发现任何信息表明这种行为变化是 Oracle 有意为之。

作为一种解决方法,您可以将 javascript 代码直接放入 HTML 文件中,或者在 java 中将 javascript 文件的内容加载到字符串中并使用webView.getEngine().executeScript() 执行它

【讨论】:

  • 是的,我也找不到任何信息。我的解决方法是使用占位符 {javascript-file},将 HTML 读入字符串,然后将占位符字符串替换为 getResource("javascript.js").toURI() 左右。丑陋,但至少它有效。
  • 实际上,这也是我最终使用的解决方案。它不漂亮,但现在可以使用。
  • 谢谢,遇到同样的情况,8u72 即将修复:bugs.openjdk.java.net/browse/JDK-8136466
猜你喜欢
  • 1970-01-01
  • 2013-10-05
  • 1970-01-01
  • 1970-01-01
  • 2014-01-19
  • 2014-02-28
  • 2014-06-15
  • 2011-09-25
  • 2017-04-09
相关资源
最近更新 更多