Russian Qt Forum

Qt => Qt Script, QtWebKit => Тема начата: joy4eg от Март 15, 2012, 17:01



Название: evaluateJavaScript и QWebView
Отправлено: joy4eg от Март 15, 2012, 17:01
Решил на досуге поиграться с qt && js, сделал пару набросков по примерам в гугле: main.cpp
Код:
#include <QtCore>
#include <QtGui>
#include <QtWebKit>
#include <QWebView>
#include <QWebFrame>
#include <QWSServer>
#include <QObject>
#include "myfunc.cpp"
//#include "echo.c"


int main(int argc, char* argv[]){

  QApplication app(argc, argv);
  QWebView *view = new QWebView;
  Foo foo;
  QObject::connect(view, SIGNAL(loadFinished(bool)), &foo, SLOT(loadFinished(bool)));
  view->load(QUrl("file:///home/userx/qwe/test.html"));
  view->show();
  foo.CallJS(view);
  return app.exec();

}
myfunc.h
Код:
#ifndef MYFUNC_H
#define MYFUNC_H

#include <QObject>
#include <QtWebKit>
#include <QWebView>


class Foo: public QWebView {

Q_OBJECT
public:
void CallJS(QWebView *test);
void CallJS_2();
   

public slots:
void loadFinished(bool);

};


#endif /* MYFUNC_H */
myfunc.cpp
Код:
#include "myfunc.h"
#include <QtGui>
#include <QApplication>
#include <QtWebKit>
#include <QWebView>
#include <string>

//Foo::Foo(QObject* parent) :QObject(parent)
//{

//}

void Foo::loadFinished(bool){
QVariant f1result = ((QWebView*)sender())->page()->mainFrame()->evaluateJavaScript("f1('test param')");
qDebug() << f1result.toString();
return CallJS_2();
};


void Foo::CallJS(QWebView *test){
qDebug() <<"CallJS!";
test->page()->mainFrame()->evaluateJavaScript("f1('alert CallJS')");

}

void Foo::CallJS_2(){
qDebug()<<"v2";
((QWebView*)sender())->page()->mainFrame()->evaluateJavaScript("f1('CallJS_2')");
}
И test.html http://paste.org.ru/?v6sa1g
Собственно, что хочу, и что не получается. Мне необходимо вызвать js функцию, с параметром, в произвольный момент времени. Сама же функция, объявлена в файле, и загружается через Qurl(). Способ с сигналом и слотом - работает, но работает,соответственно, при поступлении сигнала. CallJS() же должен выполняться как нужно, но он, не видит страницу и объявленные в ней функции. В какую сторону посоветуете посмотреть ?


Название: Re: evaluateJavaScript и QWebView
Отправлено: mutineer от Март 15, 2012, 18:21
view->load() работает асинхронно, поэтому на момент вызова CallJS страница еще не распарсена и никакого f1 не существует


Название: Re: evaluateJavaScript и QWebView
Отправлено: joy4eg от Март 15, 2012, 18:34
view->load() работает асинхронно, поэтому на момент вызова CallJS страница еще не распарсена и никакого f1 не существует
Хм...Как можно тогда отследить все это, и вызывать только тогда, когда она загружена ?


Название: Re: evaluateJavaScript и QWebView
Отправлено: mutineer от Март 15, 2012, 18:46
view->load() работает асинхронно, поэтому на момент вызова CallJS страница еще не распарсена и никакого f1 не существует
Хм...Как можно тогда отследить все это, и вызывать только тогда, когда она загружена ?

Сигнал loadFinished(bool) высылается когда страница загружена