Как передать аргумент в функцию 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:)