#javascript #html
#javascript #HTML
Вопрос:
В веб-приложении, с которым я столкнулся, в logout.jsp есть строка javascript как:
parent.parent.renderProcessingTextOff();
При отладке страницы с помощью IE script debugger она прерывается в строке выше с ошибкой в виде:
Object doesn't support this property or method
В чем смысл этой ошибки?
Как это решить?
Я новичок в javascript, поэтому, пожалуйста, объясните простыми словами.
Поток выхода из системы равен:
при нажатии кнопки выхода из системы передается команда и перехватывается в interceptor, который направляет ее соответствующему процессору, который пересылает запрос в logout.jsp.
Это приложение spring, если эта информация может как-то помочь.
Спасибо за чтение!!
Комментарии:
1. Мне кажется, что
parent
это DOMElement,parent.parent
является родительским DOMEelement этого DOMElement. Метод.renderProcessingTextOff()
не является стандартным методом DOMElement, следовательно, он не существует и вызовет это исключение. Итак, где-то нужен код, чтобы добавить этот метод к этому конкретному DOMElement.2. Почему это помечено как «spring» и «jsp»?
Ответ №1:
Есть ли фреймы или iframes на вашей странице? Или элементы объекта?
parent
является свойством window
объекта (и window.
часть window.parent
предполагается, если вы ее не учитываете).
Из MDN:
Когда окно загружается в
<iframe>
,<object>
или<frame>
, его родительским элементом является окно с элементом, встраивающим окно.
Итак, если из iframe, который находится по крайней мере на два уровня ниже, в строке parent.parent.renderProcessingTextOff();
указано вызвать renderProcessingTextOff()
функцию, определенную ее прародителем.
Очевидно, что если эта строка кода появилась там, где не было прародителя с определенной функцией, то вы получите ошибку, которую вы указали.
Комментарии:
1. Строка является частью logout.jsp и будет выполняться при каждой загрузке logout.jsp. Теперь logout.jsp загружается через диспетчер сервлетов. Так что не знаю назначения этой строки здесь. Откуда берется понятие родителя, прародителя и т.д.??? Извините, но я новичок в javascript и мне нужно улучшить его старый код.. Из вашего ответа я чувствую, что строка вообще не требуется .. правильно?
2. У меня нет способа узнать, требуется ли эта строка, потому что я не знаю, что делает ваша
renderProcessingTextOff()
функция. Не беспокойтесь о диспетчере сервлетов, это то, что происходит на вашем веб-сервере. Загружается ли logout.jsp на клиенте в веб-браузере таким образом, что он заполняет все окно браузера, или находится в iframe так, что занимает только часть другой страницы? Если последнее, то «родительской» является другая страница.
Ответ №2:
В этом случае, похоже, что первое слово, parent
является экземпляром объекта. У этого объекта есть свойство, вызываемое parent
, и для доступа к нему вы используете синтаксис parent.parent
. Свойство, в свою очередь, является другим объектом, который, как предполагается, имеет свойство с именем renderProcessingTextOff
, которое вызывается как функция.
Если бы я рискнул предположить о вашей проблеме, похоже, что parent.parent
относится к Object
классу верхнего уровня и Object
не имеет такого метода.
Если вы уже используете отладчик сценариев IE, поставьте точку останова в этой строке и изучите объекты parent
и parent.parent
.
Комментарии:
1. Хотя в целом это имеет смысл, этот ответ является неполным в контексте javascript и среды браузера. «parent» — это предварительно определенное свойство объекта «window», таким образом, неявно доступное в глобальной области видимости. «родительский» относится к родительскому «окну» в случае встроенных контекстов (iframe, фрейм и т.д.).