src/Evaluate.cpp in capybara-webkit-1.11.1 vs src/Evaluate.cpp in capybara-webkit-1.12.0

- old
+ new

@@ -6,9 +6,28 @@ Evaluate::Evaluate(WebPageManager *manager, QStringList &arguments, QObject *parent) : SocketCommand(manager, arguments, parent) { } void Evaluate::start() { - QVariant result = page()->currentFrame()->evaluateJavaScript(arguments()[0]); + 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); JsonSerializer serializer; finish(true, serializer.serialize(result)); }