У нас есть апплет Java, который пользователи используют для загрузки изображений в нашу базу данных, и мы используем Oracle deployJava.js для его запуска. В последнее время некоторые пользователи, в том числе один из моих сотрудников, постоянно перенаправляются на страницу установки Oracle на Java даже при установке Java.DeployJava.js перенаправляет некоторых (но не всех) пользователей на установку Java, когда установлен только Java 8
Я пытался отладить это на компьютере моего сослуживца и обнаружил следующее:
Она Java 8 установлена, но не Java 7. (не удаление предыдущих Java объектов и имеющие только Java 8 в одиночку , однако, недостаточно, чтобы воспроизвести эту проблему.)
Эта проблема возникла в Internet Explorer 11 и текущих версиях Chrome и Firefox; после того, как плагин запускается на сайте, Chrome и Firefox работают после перезагрузки страницы и последующих посещений (даже при использовании «разрешить один раз»), тогда как разрешение временно или постоянно не имеет никакого значения в Internet Explorer. Поведение, когда вещи внезапно начинают работать, не было воспроизводимым для других пользователей с той же проблемой.
Это не связано с ошибкой строки агента пользователя JDK-8026474, мы используем текущую версию deployJava.js, где это исправлено.
Включение режима совместимости в Internet Explorer не имеет никакого значения.
В попытке отладки это в Javascript, оказывается, что проблема заключается в функции getJREs:
getJREs: function() {
var list = new Array();
if (this.isPluginInstalled()) {
var plugin = this.getPlugin();
var VMs = plugin.jvms;
for (var i = 0; i < VMs.getLength(); i++) {
list[i] = VMs.get(i).version;
}
} else {
var browser = this.getBrowser();
if (browser == 'MSIE') {
if (this.testUsingActiveX('1.7.0')) {
list[0] = '1.7.0';
} else if (this.testUsingActiveX('1.6.0')) {
list[0] = '1.6.0';
} else if (this.testUsingActiveX('1.5.0')) {
list[0] = '1.5.0';
} else if (this.testUsingActiveX('1.4.2')) {
list[0] = '1.4.2';
} else if (this.testForMSVM()) {
list[0] = '1.1';
}
} else if (browser == 'Netscape Family') {
this.getJPIVersionUsingMimeType();
if (this.firefoxJavaVersion != null) {
list[0] = this.firefoxJavaVersion;
} else if (this.testUsingMimeTypes('1.7')) {
list[0] = '1.7.0';
} else if (this.testUsingMimeTypes('1.6')) {
list[0] = '1.6.0';
} else if (this.testUsingMimeTypes('1.5')) {
list[0] = '1.5.0';
} else if (this.testUsingMimeTypes('1.4.2')) {
list[0] = '1.4.2';
} else if (this.browserName2 == 'Safari') {
if (this.testUsingPluginsArray('1.7.0')) {
list[0] = '1.7.0';
} else if (this.testUsingPluginsArray('1.6')) {
list[0] = '1.6.0';
} else if (this.testUsingPluginsArray('1.5')) {
list[0] = '1.5.0';
} else if (this.testUsingPluginsArray('1.4.2')) {
list[0] = '1.4.2';
}
}
}
}
if (this.debug) {
for (var i = 0; i < list.length; ++i) {
log('[getJREs()] We claim to have detected Java SE ' + list[i]);
}
}
return list;
}
На компьютере моего сослуживца в Internet Explorer, в "this.isPluginInstalled()" Проверка не работает, поэтому функция переходит в резервную копию, где нет проверки на Java 8. Я попытался создать локальную копию deployJava и вручную добавить проверку, но это не повлияло - IE все еще терпит неудачу.
Вот тестовая страница, я написал, чтобы оценить проблему:
<html>
<head><title>DeployJava test</title></head>
<body>
<script src="https://www.java.com/js/deployJava.js"></script>
<script>
document.write("Has Java version 1.6: " + deployJava.versionCheck("1.6") + "<br\>");
document.write("Has Java version 1.7: " + deployJava.versionCheck("1.7") + "<br\>");
document.write("Has Java version 1.8: " + deployJava.versionCheck("1.8") + "<br\>");
document.write("Installed JREs: " + deployJava.getJREs() + "<br\>");
document.write("Firefox version: " + deployJava.firefoxJavaVersion + "<br\>");
document.write("ActiveX version: " + deployJava.testUsingActiveX("1.8.0") + "<br\>");
document.write("MIME type version: " + deployJava.testUsingMimeTypes("1.8") + "<br\>");
document.write("Plugin Array version: " + deployJava.testUsingPluginsArray("1.8.0"));
</script>
</body>
</html>
На моем компьютере это дает следующее IE 11:
Имеет Java версии 1.6: ложная Has Java версии 1.7 ложь Имеет Java версии 1.8: истинные Установленные JREs: 1.8.0_25 Firefox версии: пустой ActiveX версии: ложные MIME тип версии: ложный Plugin массив версии: ложные
На компьютере моего сослуживца, что сталкивается этот вопрос, с теми же версиями IE и Java, это дает:
Имеет Java версии 1.6: ложные Имеет Java версии 1.7: ложная Has Java версии 1.8: ложные Установленные JREs: Firefox версия: пустой ActiveX версия: ложь MIME типа версия: ложный Plugin массив версия: ложная
идей для того, что еще я могу попробовать?
Update
Наш текущий догадка для того, что вызвано это установка Java 7, которая не была удалена правильно, когда 8 установлен, оставляя за собой неисправной плагин для браузера. Мы смогли исправить эту проблему для обоих пользователей, сталкивающихся с этой проблемой, с помощью решения грубой силы по удалению всех установок Java со своего компьютера и переустановке только Java 8.