[Qt-jambi-interest] how to extend a javascript object?

付新荣 FuXinRong at skyworth.com
Mon Aug 10 11:04:59 CEST 2009


hi, evertybody.
i attempt to write a example accoding to the blog http://www.ziobudda.net/node/164328

it add a custom object "m_myobject" to "qwebpage" class.

qwebpage.h
......
MyObject * m_myobject;
......

In the member function "QWebFrame *QWebPage::mainFrame()"
qwebpage.cpp
......
QWebFrame *QWebPage::mainFrame() const
{
......
m_myobject->setWebFrame( d->mainFrame );
......
}



MyObject class:

class MyObject : public QObject
{
    Q_OBJECT
    Q_PROPERTY(QString testString READ testString WRITE setTestString)
    Q_PROPERTY(int testInt READ testInt WRITE setTestInt)

public:
    MyObject () : QObject(0), integer(0){}
	~MyObject (){}

void setWebFrame( QWebFrame *m_Frame )
{
//    QWebPage *page = view->page();
    frame = m_Frame;
qDebug() << "setWebFrame";
    attachObject();
    connect( frame, SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(attachObject()) );
}

    void setTestString(const QString &str) {
        qDebug() << "called setTestString" << str;
        string = str;
    }
    void setTestInt(int i) {
        qDebug() << "called setTestInt" << i;
        integer = i;
    }
    QString testString() const {
        qDebug() << "called testString" << string;
        return string;
    }
    int testInt() const {
        qDebug() << "called testInt" << integer;
        return integer;
    }
    QString string;
    int integer;
//	QWebFrame *frame;

public slots:
    void foo() { 
	qDebug() << "foo invoked";
	fprintf(stderr, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafuxinrongojdfkdslajfldsjflsd");
 }

private slots:
void attachObject()
{
	qDebug() << "attachObject";
    frame->addToJavaScriptWindowObject( QString("my_exjs"), this );
}
	
private:
    QWebFrame *frame;
};



test.html
<html>
<head>
<script language="javascript">
function sky_js_test()
{
        SkyTv.foo();
        SkyTv.setTestInt(5);
}
function a()
{
        alert("hahha");
}
</script>
</head>
<body onLoad="sky_js_test()">
<p>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</p>
<p>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</p>
<p>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</p>
<p>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</p>
<p>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa </p>
</body>
</html>


but I can't get the object to do anything inside of html page.
who can give me an example?




More information about the Qt-jambi-interest mailing list