Я получаю сообщение об ошибке, которое можно воспроизвести только в Firefox.
В IE это всегда работает.
У меня есть приложение ASP.NET, предназначенное для апплета. Для большинства функций это прекрасно работает, но когда я запускаю одну функцию (функцию, которая делает много разных вещей), методы в Java-апплете кажутся недоступными! Когда я вызываю любые функции в java-апплете из кода Javascript, я получаю сообщение об ошибке: myApplet.myFunction не является функцией .
После того, как это произошло, я получаю ту же ошибку для всего, что вызывает функции в апплете, а также для функций, которые работали до этого состояния.
Апплет не выгружен или не аварийно завершен, что подтверждается тем, что интерактивные функции в апплете все еще работают. Но если апплет вызывает функцию javascript на странице, которая вызывает апплет, я получаю ту же ошибку!
Иногда это работает, когда я повторяю действие несколько раз.
Это происходит только в общедоступной версии веб-приложения. Не в моем локальном веб-приложении, которое работает на компьютере разработчика. Основное отличие состоит в том, что общедоступный использует логин.
Может ли кто-нибудь дать мне подсказку о том, что может быть причиной этого?
Подводя итог, что происходит: когда я запускаю определенный фрагмент кода javascript, API для java-апплета становится недоступным (ошибка: myApplet.myFunction не является функцией ).
Вот функция, которая вызывает это ошибочное состояние апплета:
function ParseAndZoomToAddress (objString) {
var mapFrame
eval("var objArray = new Array(" + objString + ")")
if (objArray.length > 0) {
mapFrame = window.frames[0].frames['mapFrame']
if(!mapFrame) alert('mapFrame is null!')
else window.status = 'mapFrame is OK!'
var center_x = 0
var center_y = 0
if(objArray.length == 1) {
var rExp1 = /[G-P]/g
var rExp2 = /[Q-Z]/g
eval("var coordArray = new Array(" + objArray[0].replace(rExp1, '0x').replace(rExp2, ',0x') + ")")
if(coordArray.length == 2){
center_x = coordArray[0]
center_y = coordArray[1]
}else{
alert("Invalid ID " + objArray[0])
}
}else{
var center_x = objArray[1]
var center_y = objArray[2]
}
var objZoomScale = '2000' // document.SearchForm.Scale.value
var scale = mapFrame.m_yur - mapFrame.m_yll
if (objZoomScale != "") {
scale = ScaleToMeter(parseInt(objZoomScale),mapFrame.m_image_width)
}
var xll = center_x - (scale / 2.0)
var yll = center_y - 10
var xur = xll + scale
var yur = center_y + 10
center_x = (xll + xur) / 2.0
center_y = (yll + yur) / 2.0
center_x = Math.round(center_x * 1000) / 1000
center_y = Math.round(center_y * 1000) / 1000
mapFrame.ResetClipPolygon() //This calls applet methods
var lCenterSymbol = '5024,40,85,x,y,5'
var rExp = /x/gi
lCenterSymbol = lCenterSymbol.replace(rExp,center_x)
rExp = /y/gi
lCenterSymbol = lCenterSymbol.replace(rExp,center_y)
mapFrame.parent.m_CenterSymbolString = lCenterSymbol
mapFrame.ResetClipPolygon() //This calls applet methods
mapFrame.previewVisible()
mapFrame.mapVisible()
mapFrame.setMove(false) //This calls applet methods
mapFrame.ZoomToArea(xll, yll, xur, yur) //This calls applet methods
mapFrame.parent.m_CenterSymbolString = ""
}
}
Дополнительно могу сказать, что апплет определяется тегом <applet>
.
Апплет находится внутри тега <div>
, который скрыт в javascript с style.display='none'
и снова показан с style.display='block'
.
Это делается в течение 2 строк:
mapFrame.previewVisible()
mapFrame.mapVisible()
Я не знаю, в этом ли проблема, но эти функции вызываются и в других местах, где это не вызывается, но это может быть сочетание вещей.
Я рад получить подсказку, которая поможет мне решить эту проблему, а не абсолютное решение.
Я приму лучший совет в качестве ответа.