capybara-webkit/src/Evaluate.cpp

34 lines
1.3 KiB
C++
Raw Normal View History

2011-02-26 18:02:43 +00:00
#include "Evaluate.h"
#include "WebPage.h"
#include "WebPageManager.h"
2012-12-29 23:47:12 +00:00
#include "JsonSerializer.h"
2011-02-26 18:02:43 +00:00
#include <iostream>
Evaluate::Evaluate(WebPageManager *manager, QStringList &arguments, QObject *parent) : SocketCommand(manager, arguments, parent) {
2011-02-26 18:02:43 +00:00
}
void Evaluate::start() {
QString script = arguments()[0];
QString jsonArgs;
if (arguments().length()>1){
jsonArgs = arguments()[1];
} else {
jsonArgs ="[]";
}
QString eval_script = QString("(function(){"
" for(var i=0; i<arguments.length; i++) {"
" arguments[i] = JSON.parse(arguments[i]);"
" if (arguments[i]['ELEMENT']) {"
" arguments[i] = Capybara.getNode(arguments[i]['ELEMENT']);"
" };"
" };"
" return eval(\"%1\");"
" }).apply(null, %2)").arg(script.replace("\"","\\\"").remove("\n"), jsonArgs);
QObject invocation_stub;
invocation_stub.setProperty("allowUnattached", false);
page()->currentFrame()->addToJavaScriptWindowObject("CapybaraInvocation", &invocation_stub);
QVariant result = page()->currentFrame()->evaluateJavaScript(eval_script);
2012-12-29 23:47:12 +00:00
JsonSerializer serializer;
2013-02-11 23:31:41 +00:00
finish(true, serializer.serialize(result));
2011-02-26 18:02:43 +00:00
}