如何在 QScriptEngine 中定义“窗口”对象
How to define the `window` object in QScriptEngine
JavaScript window
对象
在 JavaScript 中,浏览器有一个全局对象window
。这个对象有一些有趣的优点:
var any = 5;
console.log(window.any);
window
对象充当命名空间,其中所有变量都在其中创建。
使用Qt QScriptEngine
时,此行为(默认情况下(不处于活动状态,Qt是一个通用JS引擎,没有这些浏览器的特定功能。
问题是:
如何让QScriptEngine
拥有这个window
对象?(具有类似的行为(
尝试
假设一个简单的C++项目包括Qt
(当前为 5.7(,下面的代码解析了一些 JS 并显示结果:
#include <QDebug>
#include <QScriptEngine>
#include <QCoreApplication>
//Logger class, for console.log
class Logger: public QObject
{
Q_OBJECT
public:
Logger( QObject*parent = nullptr): QObject(parent) {}
public slots:
void log(const QString& str){ qDebug() << str; }
};
#include "test.moc"
int main(int argn, char* args[])
{
QCoreApplication app(argn, args);
QScriptEngine engine;
// Logger
Logger logger;
QScriptValue loggerResult = engine.newQObject(&logger);
engine.globalObject().setProperty("console", loggerResult);
// TODO CONFIG HERE FOR WINDOW OBJECT
//engine.globalObject().setProperty(QString("window"),
// engine.newObject()); //Does not work, obviously
engine.evaluate("var test=42; console.log(test); console.log(window.test)");
if (engine.hasUncaughtException())
{
int line = engine.uncaughtExceptionLineNumber();
QScriptValue error = engine.uncaughtException();
QStringList errorStr = engine.uncaughtExceptionBacktrace();
qDebug() << "Exception at:" << line << ":" << error.toString();
}
}
输出:
"42">
"">
您可以将
this
分配给window
变量:
engine.evaluate("window=this; var test=42; console.log(test); console.log(window.test)");
输出:
"42">
"42">
Qt Blog中有一篇关于在QtScript中伪造Web浏览器环境的博客文章。
相关文章:
- Qt:从另一个窗口访问公共对象
- 如何在Qt中连接来自不同窗口的两个对象?
- Qt5 ui,多个窗口:如何从窗口 1 访问窗口 2 中的 UI 对象
- 如何从 Gtk::窗口调用派生对象的析构函数
- QT:即使在static_cast后也无法在主窗口中设置对象的位置
- 在C++中,系统如何将这些对象中的每一个与执行程序的窗口相关联?
- QT:将对象传递到每个窗口
- 如何在 QScriptEngine 中定义“窗口”对象
- 如何在调用函数时将对象绘制到 sfml 窗口上
- 如何在使用C++打开隐藏的 COM 对象时隐藏控制台窗口
- 如何为所有窗口形式声明全球类对象
- SFML-无法在窗口中修改对象
- SDL2 无法创建窗口,因为它找不到匹配的 GLX 视觉对象
- 如果对象父对象是窗口,则Qt程序运行缓慢
- Win32获取从窗口WNDProc发送事件的对象的HWND
- 制作垫子类型对象的数组.输出窗口显示同一帧
- 如何获得一个窗口,以便在调整C++大小时保留绘制的对象
- 如何通过单击按钮在窗口上生成对象
- 窗口的旧式对象面向的类引用
- 使用 EnumWindows 填充窗口对象列表