Как передать аргумент для оценки функции JavaScript?

for (int i = 0; i < centerPointsList.size (); i++)
{
QVariant         holdInformation = map->page ()->mainFrame ()->evaluateJavaScript (QString ("constructFileName (%1).arg (centerPointsList[0].toFloat())"));
QList <QVariant> allListObj      = holdInformation.toList ();
QList <QVariant> fileNamesList   = allListObj[0].toList ();

std :: cout << fileNamesList[0].toFloat() << "================= \n";

}

Это приводит к:

«SyntaxError: Ошибка разбора в строке: 1 Источник: не определено»
Ошибка сегментации

Я предполагаю, что ошибка в том, как я передаю элемент списка в функцию evaluateJavaScript,

ОБНОВИТЬ:


Я попробовал это:

for (int i = 0; i < centerPointsList.size (); i++)
{
QVariant holdInformation = map->page ()->mainFrame ()->evaluateJavaScript (QString ("constructFileName (%1)").arg (centerPointsList [0].toFloat ()));

что привело к:

«TypeError: Результат выражения ‘centerPointFileName.split’ [undefined] не является функцией. On line: 65 Источник: file: ///…/index.html»

Функция constructFileName (в Javascript) выглядит следующим образом:

function constructFileName (centerPointFileName)
{
var removeSpaces = centerPointFileName.split (" ");
var fileNameWithoutSpaces = "", i;
for (i = 0; i < removeSpaces.length; i++)
fileNameWithoutSpaces = fileNameWithoutSpaces + removeSpaces [i];

0

Решение

Согласно вашему обновлению, ваша функция JavaScript ожидает строковый аргумент. Самый простой подход должен выглядеть так:

QString info = QString("constructFileName('%1')").arg(centerPointsList[i].toFloat());
QVariant holdInformation = map->page()->mainFrame()->evaluateJavaScript(info);

Тем не менее, в целом это не совсем безопасно — если интерполированный аргумент %1 содержит обратную косую черту, двойные кавычки или другие специальные символы, их нужно сначала экранировать. Я не могу комментировать, как это должно быть сделано, так как я никогда не работал с Qt 🙂

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]