Details
Description
C++ code:
class Global : public QObject { Q_OBJECT public slots: QPixmap pixmap() const { QPixmap px(100, 100); px.fill(Qt::red); return px; } }; class WebView : public QWebView { Q_OBJECT public: WebView() { QObject::connect(page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(addJSObject())); } public slots: void addJSObject() { page()->mainFrame()->addToJavaScriptWindowObject("global", &m_global); } private: Global m_global; }; int main(int argc, char *argv[]) { QApplication app(argc, argv); WebView *view = new WebView; view->load(QUrl::fromLocalFile(QApplication::applicationDirPath() + QDir::separator() + "screenshot.html")); view->show(); return app.exec(); }
HTML page:
<!doctype html> <html> <head> <script> function go() { try { var s = global.pixmap(); alert("Size: " + s.width + "x" + s.height + "\nType: " + s); // CRASH //for(var i in s) //alert(i); alert(s.toDataURL()); } catch(ex) { alert("Exception: " + ex); } } </script> </head> <body> <button onClick="go()">Go</button> </body> </html>
Compile and run. Press "Go" button. Two messages will appear:
Size: 100x100
Type: [Qt Native Pixmap 100,100]
Exception: TypeError: undefined is not a function (evaluating 's.toDataURL()')