Как передать аргумент в функцию valuJavaScript?

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];

1 ответ

Решение

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

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

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

Другие вопросы по тегам