标签: qjsengine

我可以更改 javascript: hasFocus() 的文档方法以始终返回 'true' 吗?

我试图愚弄这个特定的代码:

<!DOCTYPE html>
<html>
<body>

<p>Click anywhere in the document (the right frame) to get focus. If you click outside the document, it will lose focus.</p>

<p id="demo"></p>

<script>
setInterval("myFunction()", 1);

function myFunction() {
    var x = document.getElementById("demo");
    if (document.hasFocus()) {
        x.innerHTML = "The document has focus.";
    } else {
        x.innerHTML = "The document DOES NOT have focus.";
    }
}
</script>

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

因此,即使我不是 Chrome 中的前台应用程序,它也会返回 True。我想到的解决方案:

  1. 以某种方式使用硒?

  2. 在 chrome JS 引擎或铬中编译新的 hasFocus() 方法?总是返回 True。

javascript selenium google-chrome chromium qjsengine

6
推荐指数
1
解决办法
349
查看次数

QJSEngine删除我的QObject,如何在QJSEngine :: newQObject之后更改所有权?

尝试使用子类化的QObject作为参数执行小型脚本。

QJSEngine jsEngine;
QJSValue arg = jsEngine.newQObject(child); // Child it's subclassed QObject
QJSValue function = jsEngine.evaluate(m_childRestriction);

QJSValue result = function.call(QJSValueList() << arg);
Run Code Online (Sandbox Code Playgroud)

在销毁jsEngine时,它将为我的子对象调用delete(因为newQObject使用JavaScriptOwnership创建了它)。如何避免这种情况,如何更改arg的所有权?

脚本很简单:

function(device) { 
    return device.m_place >=0 && device.m_place < 16; 
}
Run Code Online (Sandbox Code Playgroud)

UPD: 可以调用QQmlEngine::setObjectOwnership(child, QQmlEngine::CppOwnership);对象,因为它是静态函数。从帮助中还不清楚。认为也应该在QJSEngine

c++ qt qjsengine

5
推荐指数
1
解决办法
1634
查看次数

QtScript vs QJSEngine什么时候使用?

我必须在C++应用程序中运行一系列javascript"脚本".其中大多数都是重复性的行为.这里的代码示例.

我知道Qt,因为版本5包含2个javascript引擎:QtScript和QJSEngine.

我的问题是我们应该使用哪种情况?哪种表现更好,在哪种情况下?

c++ qt qtscript qjsengine

5
推荐指数
1
解决办法
1694
查看次数

如何使用QJSEngine构建API?

我从Qt开始,我的一个项目是使用QJSEngine评估javascript,我想为脚本提供完整的API,包括类和全局函数。

现在,我的程序仅提供ECMAScript默认值(eval,encodeURI,parseInt等),但是我需要向代码公开一些自定义类,例如浏览器API(WebSocket类,Image类,文档对象)。例如:

var obj = new CustomClass("", 0);
var ret = obj.customClassMethod("[...]!");
customFunction(ret);
Run Code Online (Sandbox Code Playgroud)

我需要在C ++中定义类的行为,这无助于评估类定义并让用户代码运行。

javascript c++ qt qt5 qjsengine

2
推荐指数
1
解决办法
2745
查看次数

QJSEngine评估的结果不包含函数

我正在将QScriptEngine代码迁移到QJSEngine,并且遇到了一个问题,我在评估脚本后无法调用函数:

#include <QCoreApplication>
#include <QtQml>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QJSEngine engine;
    QJSValue evaluationResult = engine.evaluate("function foo() { return \"foo\"; }");

    if (evaluationResult.isError()) {
        qWarning() << evaluationResult.toString();
        return 1;
    }

    if (!evaluationResult.hasProperty("foo")) {
        qWarning() << "Script has no \"foo\" function";
        return 1;
    }

    if (!evaluationResult.property("foo").isCallable()) {
        qWarning() << "\"foo\" property of script is not callable";
        return 1;
    }

    QJSValue callResult = evaluationResult.property("foo").call();
    if (callResult.isError()) {
        qWarning() << "Error calling \"foo\" function:" << …
Run Code Online (Sandbox Code Playgroud)

javascript c++ qt qtscript qjsengine

1
推荐指数
1
解决办法
1679
查看次数

将 QJsonObject 转换为 Javascript 对象

由于 qt 文档上的QJSValueQJsonObjectinst 不能隐式转换为QJSValue,我想QJSEngine从 C++ 调用一个 javascript 函数,参数应该传递到QList<QJsValue>调用另一个QJSValue保存函数本身的函数。

问题是我的一个论点是QJsonObject,到目前为止,我应该将其转换为文本,然后调用并将其传递给调用将JSON.parse其转换为对象的 javascript 函数,我正在寻找一种解决方案,让我可以将其转换QJsonObjectQJSValueC++并使用对象参数而不是 json 文本调用 javascript 函数。

目前代码如下

QJsonObject obj;
obj["1"] = QString("A");
obj["2"] = QString("B");

QJSValue func = myEngine.evaluate("(function(arg) { var obj = JSON.parse(arg); var res = obj[\"1\"] + obj[\"2\"]; return res; })");
QJSValueList args;
args << QString(QJsonDocument(obj).toJson());
QJSValue res = func.call(args);
Run Code Online (Sandbox Code Playgroud)

我想要一个像QJSValue ConvertToQJSValue(QJsonObject object)这样的函数:

QJsonObject obj;
obj["1"] = …
Run Code Online (Sandbox Code Playgroud)

javascript c++ qt qjsengine

1
推荐指数
1
解决办法
1953
查看次数

QJSEngine:打印到控制台

我正在从QScriptEngine(已被弃用)转移到QJSEngine,我发现我无法使用print:

  QJSEngine engine;

  QJSValue val = engine.evaluate(
        "print('123');"
        );

  if (val.isError()){
     qDebug() << "error: " << val.toString();
  }

  qDebug() << "val: " << val.toVariant();
Run Code Online (Sandbox Code Playgroud)

输出是:

error:  "ReferenceError: print is not defined"
Run Code Online (Sandbox Code Playgroud)

QScriptEngine它的作品.

然后,打印控制台的方式是什么QJSEngine?在文档中找不到任何内容.我尝试使用console.log,但console也没有定义.

qt qjsengine console.log

0
推荐指数
2
解决办法
1750
查看次数