Javascript — значение «parent.parent.someFunction()»;

#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, фрейм и т.д.).