QWebFrame addToJavaScriptWindowObject()对象在Javascript中是未定义的
作者:互联网
我已经开始再次深入研究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