ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

QWebFrame addToJavaScriptWindowObject()对象在Javascript中是未定义的

2019-08-26 21:33:28  阅读:231  来源: 互联网

标签:javascript qt qwebkit


我已经开始再次深入研究C和Qt,并且一直在使用WebKit Javascript / Qt绑定.我的所有移动部件都在工作,除了我的QObject子类在Javascript端是“未定义”.这是我遇到问题的简单测试应用程序:

我的主窗口实现:

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);

// instantiate a webview
QWebView *webview = new QWebView(this);
webview->setGeometry(0, 0, 400, 300);
webview->setUrl(QUrl("file://localhost/Users/kyle/Sites/tests/qt/index.html"));

// instantiate and attach our QObject
hello *h = new hello();

QWebFrame *frame = webview->page()->mainFrame();
frame->addToJavaScriptWindowObject("Hello", h);

// show the window
webview->show();
}

HELLO.CPP

...snip...

QString hello::say()
{
    return QString("Kyle");
}

Hello.h

...snip includes...

class hello : public QObject
{
    Q_OBJECT

public:
    hello();
    Q_INVOKABLE QString say();

};

上面提到的index.html文件执行一个简单的警报(Hello.say())调用,但是执行typeof Hello,我得到了未定义.

我对C有点生疏,对Qt很新,所以我确定这是一个noob错误,但我很难过.

解决方法:

无法随时在页面中插入对象.你应该把那一行:

frame->addToJavaScriptWindowObject("Hello", h);

在连接到QWebFrame的javaScriptWindowObjectCleared() signal的插槽中并移动一些代码,以便您可以从该插槽访问该帧.

另见Qt附带的Form Extractor example.

标签:javascript,qt,qwebkit
来源: https://codeday.me/bug/20190826/1734017.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有