如何将参数传递给evaluateJavaScript函数?

时间:2013-01-05 07:34:35

标签: javascript c++ qt qwebview

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]不是函数。在线: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 个答案:

答案 0 :(得分:1)

根据您的更新,您的JavaScript函数需要一个字符串参数。最简单的方法应如下所示:

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

但是,一般情况下这并不完全安全 - 如果插值参数%1包含反斜杠,双引号或其他特殊符号,则需要首先对其进行转义。我无法评论应该如何做,因为我从未使用过Qt:)