JavaFx在使用JRE7时无法在Internet Explorer 11中正常工作

3

我注意到我的程序无法在web IE 11上启动。我知道IE11的用户代理是Trident而不是MSIE。因此,我推测这就是为什么即使Java已经安装,我仍然会收到安装Java的通知的原因。但我暂时找不到解决方法,有些人通过更新WebStart的deployJava.js并将“trident”与“msie”添加在一起来解决此问题。

请注意,只有Windows 7可以安装IE11或随Windows 8.1捆绑安装IE11。您无法在Windows 8上安装IE11或将其升级到IE11。

再次简要提出我的问题:

1- JavaFX应用程序在哪里检测浏览器代理?

2- 是否可能修改负责此操作的软件包并将Jar文件包含在项目中?

欢迎任何想法。

2个回答

2

Internet Explorer 11不是JRE 7中JavaFX的支持配置之一

您可以通过在JavaFX问题跟踪器中提交功能请求来请求对Internet Explorer 11的支持。您可以在功能请求中链接回这个问题。

我猜您在问题中所说的是Microsoft在IE11的UserAgent字符串中放置的信息与以前版本不同,并且在IE11中理解UserAgent字符串编码信息的方式与早期浏览器版本不同。这些变化意味着当前的JavaFX部署代码无法正确检测到它正在运行在一个IE11环境中,并执行适当的操作以使JavaFX应用程序能够在IE11中执行。

我相信JavaFX打包代码使用一个dtjava.js脚本来检测目标浏览器。对于JavaFX 8,这个检测例程是(我相信)JavaScript detectEnv()方法。要获得IE11兼容性,您可能需要托管自己的部署脚本,并在本地部署脚本中用您创建的兼容IE 11的修改版本替换dtjava.js(如何执行此操作的详细说明超出了本答案的范围)。即使您确实让dtjava.js脚本正确识别并执行IE 11的逻辑,仍然可能存在在IE 11中运行JavaFX的其他问题(因为它目前不是受支持的部署平台)。


2

我已经在dtjava.js中进行了一些修改,并使其在IE11中运行。

在我的情况下,我仅使用dtjava.js来嵌入一个非基于JavaFX的小程序,因此这些修改可能不足以使JavaFX应用程序运行。

我将IE检测规则从

ie = isDef(window.execScript);

为了

ie = /trident/.test(u);

detectEnv() 中,以及。
if (isDef(d.addEventListener)) {
    d.addEventListener("DOMContentLoaded",
    invokeCallbacks, false);
}
if (ua.ie && ua.win) {

使用
if (isDef(d.addEventListener)) {
    d.addEventListener("DOMContentLoaded",
    invokeCallbacks, false);
}
else if (isDef(d.attachEvent)) {

init()函数中。

当然,这些都是一些不太经过测试的hacky变化(只在IE10、11和最新版的Firefox和Chrome浏览器上进行了测试)。你需要自行承担风险...


正如你所说,这是针对小程序而不是JavaFX的...但是感谢您与我们分享您的解决方案... - Maher Abuthraa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接