Вы выполняете сценарий только js.executeScript("return nodes =[];");
. Остальная часть сценария игнорируется после этого оператора возврата.
Следовательно вы получаете пустой массив.
Что касается executeScript(String)
документации javaDoc, ваш код сценария упакован и выполняется как тело анонимной функции, подобной этой:
function f() {
return nodes = [];
xPathResult = document.evaluate('//comment()', document, null, XPathResult.ANY_TYPE, null);
nodes = [];
node = xPathResult.iterateNext();
while (node) {
nodes.push(node.textContent);
node = xPathResult.iterateNext();
}
nodes;
}();
Как вы знаете, каждый оператор скрипта отделяется ";". Поскольку первый оператор является оператором return
, функция заканчивается там и возвращает пустой массив в качестве результата.
В консоли браузера скрипт работает должным образом, поскольку он не останавливается на операторе return, а выводит значение nodes;
финального оператора.
Вы должны переместить возврат от первого к последнему утверждению:
xPathResult = document.evaluate('//comment()', document, null, XPathResult.ANY_TYPE, null);
nodes = [];
node = xPathResult.iterateNext();
while (node) {
nodes.push(node.textContent);
node = xPathResult.iterateNext();
}
return nodes;