Russian Qt Forum
Ноябрь 22, 2024, 22:42 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: evaluateJavaScript и QWebView  (Прочитано 6239 раз)
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() же должен выполняться как нужно, но он, не видит страницу и объявленные в ней функции. В какую сторону посоветуете посмотреть ?
Записан
mutineer
Гость
« Ответ #1 : Март 15, 2012, 18:21 »

view->load() работает асинхронно, поэтому на момент вызова CallJS страница еще не распарсена и никакого f1 не существует
Записан
joy4eg
Гость
« Ответ #2 : Март 15, 2012, 18:34 »

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

view->load() работает асинхронно, поэтому на момент вызова CallJS страница еще не распарсена и никакого f1 не существует
Хм...Как можно тогда отследить все это, и вызывать только тогда, когда она загружена ?

Сигнал loadFinished(bool) высылается когда страница загружена
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.045 секунд. Запросов: 20.