Не удается получить доступ к получателю Node.childNodes на устройстве Android

#javascript #android #webview #android-webview

#javascript #Android #webview #android-webview

Вопрос:

Я отлаживаю проблему на устройстве Android. (с использованием эмулятора, но он воспроизводится на многих устройствах). Я открываю свою страницу с помощью браузера Android WebView

 WebView in com.google.android.gms (39.0.0.0)
 

Я выбираю body элемент и успешно считываю его childNodes свойство.
Но я не могу найти childNodes получатель ни на Node.prototype , ни на его родителях в цепочке прототипов.

 const el = document.querySelector('body')
undefined
el instanceof Node
true
el instanceof HTMLBodyElement
true
el instanceof HTMLElement
true
el.childNodes.length
61
Object.getOwnPropertyDescriptor(Node.prototype,'childNodes')
undefined
Object.getOwnPropertyDescriptor(HTMLBodyElement.prototype,'childNodes')
undefined
Object.getOwnPropertyDescriptor(HTMLElement.prototype,'childNodes')
undefined
 

Цепочка прототипов элементов тела:

 HTMLBodyElement
HTMLElement
Element
Node 
EventTarget
Object 
null
 

childNodes не существует ни Object.getOwnPropertyDescriptor на одном из них.

Есть ли у меня способ узнать, как это childNodes свойство добавляется к Node.prototype и, чтобы получить эту функцию?

Комментарии:

1. Привет. Получили ли вы какое-либо решение этой проблемы

2. Эй, @Karthikkumar, мне не удалось решить эту проблему, но я нашел определенный обходной путь. Я обновил свой ответ и надеюсь, что это поможет.

Ответ №1:

Я не нашел способа получить функцию getter в этих конкретных старых браузерах (я предполагаю, что это функция браузера, которая блокирует доступ к ним).

Вместо этого я сделал своего рода обходной путь:

  const descriptor = Object.getOwnPropertyDescriptor(object, functionName);
  if (descriptor?.get) {
    return descriptor.get;
  }
  if (descriptor?.value) {
    return descriptor.value;
  }
  // if no access - just a return a function that returns this property
  return function () {
    return this[functionName];
  };