Проверка наличия элемента HTML в окне просмотра - PullRequest
0 голосов
/ 09 марта 2020

Мой Applescript, который использует JavaScript внутри, пытается вернуть true, если элемент находится в области просмотра.

Пока что он не работает и возвращает «пропущенное значение», даже если «var ele» правильно целевой, и браузер позволяет JavaScript из Apple Events.

Есть идеи, как заставить его работать?

tell application "Brave Browser" to tell active tab of front window
    execute JavaScript "

var ele = document.getElementsByClassName('tBJ dyH iFc SMy yTZ erh DrD IZT mWe')[0];

function isVisible (ele) {
  const { top, bottom } = ele.getBoundingClientRect();
  const vHeight = (window.innerHeight || document.documentElement.clientHeight);

  return (
    (top > 0 || bottom > 0) &&
    top < vHeight
  );
}
"

end tell

1 Ответ

0 голосов
/ 09 марта 2020

Вы на самом деле не используете функцию isVisible.

Вы можете проверить, что Brave возвращает значения из execute javascript, используя более простой скрипт:

tell application "Brave Browser"
    tell active tab of front window
        execute javascript "1"
    end tell
end tell

Или вы может следовать логике c в части JavaScript скрипта, запустив его прямо на тестовой странице в браузере; если вы сделаете последнее, вы увидите, что

  1. назначаете элемент для var ele.
  2. , создаете функцию isVisible, которая принимает один аргумент.
  3. но никогда не вызывать функцию isVisible.

Это можно исправить, вызвав функцию или удалив функцию, в зависимости от ваших потребностей.

Вызовите функцию ; обратите внимание, что я заменил getElementsByClassName на getElementsByTagName, чтобы было проще тестировать его на произвольных веб-страницах:

tell application "Brave Browser"
    tell active tab of front window
        execute javascript "
var firstParagraph = document.getElementsByTagName('p')[0];
isVisible(firstParagraph)

function isVisible (elementToCheck) {
  const { top, bottom } = elementToCheck.getBoundingClientRect();
  const vHeight = (window.innerHeight || document.documentElement.clientHeight);

  return (
    (top > 0 || bottom > 0) &&
    top < vHeight
  );
}
"
    end tell
end tell

Или, например, удалить функцию:

tell application "Brave Browser"
    tell active tab of front window
        execute javascript "
var firstParagraph = document.getElementsByTagName('p')[0];
var firstParagraphRect = firstParagraph.getBoundingClientRect();
var top = firstParagraphRect.top
var vHeight = window.innerHeight || document.documentElement.clientHeight;
(firstParagraphRect.top > 0 || firstParagraphRect.bottom > 0) && firstParagraphRect.top < vHeight

    "
    end tell
end tell

In В каждом случае вы можете заменить имя тега «p» на тег, который не виден, например, «title», чтобы увидеть, что он также правильно возвращает false.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...