Russian Qt Forum
Май 18, 2012, 20:03
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Работа с сетью
(Модератор:
Sergeich
) >
[РЕШЕНО] QWebView + javascript + выполнить функцию
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: [РЕШЕНО] QWebView + javascript + выполнить функцию (Прочитано 565 раз)
bosfor
Новичок
Offline
Сообщений: 47
[РЕШЕНО] QWebView + javascript + выполнить функцию
«
:
Февраль 01, 2012, 18:23 »
Ребят подскажите : Есть не6обходимость загрузить яваскрипт и юзать его функцию, но самое непонятное для меня (на форуме не нашел), ему надо передать бинарный параметр (QByteArray) и получить строковый (QString) результат.
Как загрузить и вызвать скрипт понятно- но как передать бинарные данные и получить ответ неясно ...
P.S: Может кто подскажет что получьше, но данный скрип должен AMF (Action Message Format) формат данных декодировать в строковое значение, других вариантов в сети не нашел. Тут буржуи пишут
http://developer.qt.nokia.com/forums/viewthread/206
«
Последнее редактирование: Февраль 03, 2012, 13:40 от bosfor
»
Записан
Bepec
phpBB Житель матрицы
Offline
Сообщений: 1280
Re: QWebView + javascript + выполнить функцию
«
Ответ #1 :
Февраль 01, 2012, 19:27 »
Код:
// имеем класс TST
// соединяем страничку и наш класс.
ui.webView->page()->mainFrame()->addToJavaScriptWindowObject("TST", this);
// любой скрипт. (все функции класса можно вызывать через "TST")
tmp =
"var divs=document.getElementsByTagName('li'); "
"TST.allo(1, 2, 3, 4, 5, 6, 7, 8, 9); ";
// выполняем скрипт и получаем цифры от 1 до 9 в вызываемом слоте.
ui.webView->page()->mainFrame()->evaluateJavaScript(tmp);
Записан
"Мастер простых решений" © andrew.k
bosfor
Новичок
Offline
Сообщений: 47
Re: QWebView + javascript + выполнить функцию
«
Ответ #2 :
Февраль 01, 2012, 22:40 »
Цитата: Bepec от Февраль 01, 2012, 19:27
Код:
tmp =
"var divs=document.getElementsByTagName('li'); "
"TST.allo(1, 2, 3, 4, 5, 6, 7, 8, 9); ";
что-то этот момент не уловил, как связаны первая и вторая строки ?
может это подойдет ?
void QWebView::setContent ( const QByteArray & data, const QString & mimeType = QString(), const QUrl & baseUrl = QUrl() )
вот только неясно как должны выглядеть бинарные данные внутри страницы если их туда поместить туда до выполнения скрипта ?
Записан
Bepec
phpBB Житель матрицы
Offline
Сообщений: 1280
Re: QWebView + javascript + выполнить функцию
«
Ответ #3 :
Февраль 02, 2012, 09:36 »
Связаны кучей кода,который я вырезал.
Твой класс может вызываться из ЯваСкрипта, ты это понимаешь, не?
А вызванная функция может вернуть в Java любые данные, которые ты можешь поместить в переменную.
аля
Код:
QString TST::allo()
{return "be be be";}
//-- куча кода
tmp =
"var divs= TST.allo(); ";
"alert(divs);"
ui.webView->page()->mainFrame()->evaluateJavaScript(tmp);
// должен вывести строку "be be be"
Записан
"Мастер простых решений" © andrew.k
bosfor
Новичок
Offline
Сообщений: 47
Re: QWebView + javascript + выполнить функцию
«
Ответ #4 :
Февраль 02, 2012, 12:08 »
что не получается, делаю так:
обозначаю свой класс который будет возвращать бинарные данные
Код:
class MyArray
{
public:
QByteArray arr;
QByteArray getArr()
{
return arr;
}
};
далее удостоверившись что страница со скриптом загруженна делаю так:
Код:
MyArray myArray;
myArray.arr.append("123");
myView->page()->mainFrame()->addToJavaScriptWindowObject("myArray", this);
QVariant gg = myView->page()->mainFrame()->evaluateJavaScript("mytest()");
qDebug() << gg;
вернуться должен был размер массива но возращается путо
Код:
QVariant(, )
а вот сам ява скрипт
Код:
<script type="text/javascript">
function mytest()
{
var i = 0;
i = myArray.getArr();
return i.length;
}
</script>
пробовал с текстом тоже не идет
Код:
class MyArray
{
public:
QByteArray arr;
QByteArray getArr()
{
return arr;
}
QString getStr()
{
return "vau !!!";
}
};
«
Последнее редактирование: Февраль 02, 2012, 13:02 от bosfor
»
Записан
Bepec
phpBB Житель матрицы
Offline
Сообщений: 1280
Re: QWebView + javascript + выполнить функцию
«
Ответ #5 :
Февраль 02, 2012, 22:57 »
Прикрепи давай архивчик с html'ом с нужной тебе функцией и функцией вывода строки.
PS в моей программе строки/числа спокойно вводятся в скрипт.
update: поглядел ещё раз на твой код. qDebug и qVariant дружат помоему только с четким указанием типа. Просто QVariant будет всегда выводить пустую строку.
Записан
"Мастер простых решений" © andrew.k
bosfor
Новичок
Offline
Сообщений: 47
Re: QWebView + javascript + выполнить функцию
«
Ответ #6 :
Февраль 03, 2012, 09:36 »
попробовал модифицировать базовый пример formextractor.pro
передаю ему QByteArray а на явескрипте вывожу длинну массива и все как не феноменально работает
я делал все также кроме как в рабочем примере класс центрального виджета описывается отдельно а потом подгужается ....
но не думаю что это должно являться причиной..
Прямо магия какаето я уже под микроскопом сравнивал файлы проекта - зацепки нет .....
«
Последнее редактирование: Февраль 03, 2012, 09:37 от bosfor
»
Записан
Bepec
phpBB Житель матрицы
Offline
Сообщений: 1280
Re: QWebView + javascript + выполнить функцию
«
Ответ #7 :
Февраль 03, 2012, 09:39 »
Выложи свою функцию ввода (или что она там у тебя делает, принимает, выводит.)
Или же выложи свой проект, тогда поковыряю палочкой и скажу, где не работает, а где поправить.
PS если уж проект коммерческий, али делиться не хошь, выложи на файлообменник с паролем, а мне ссыль в Личные Сообщения кинь. ^^
Записан
"Мастер простых решений" © andrew.k
bosfor
Новичок
Offline
Сообщений: 47
Re: QWebView + javascript + выполнить функцию
«
Ответ #8 :
Февраль 03, 2012, 10:55 »
domtraversal - не работает
formextractor - работает
Записан
Bepec
phpBB Житель матрицы
Offline
Сообщений: 1280
Re: QWebView + javascript + выполнить функцию
«
Ответ #9 :
Февраль 03, 2012, 13:04 »
*В ужасе бьётся об стенку*
Что за проект? Как это работало? Куда это сувать?
Примерно такие у меня сейчас мысли, глядя на код твоего нерабочего проекта...
Записан
"Мастер простых решений" © andrew.k
bosfor
Новичок
Offline
Сообщений: 47
Re: QWebView + javascript + выполнить функцию
«
Ответ #10 :
Февраль 03, 2012, 13:09 »
Цитата: Bepec от Февраль 03, 2012, 13:04
*В ужасе бьётся об стенку*
Что за проект? Как это работало? Куда это сувать?
Примерно такие у меня сейчас мысли, глядя на код твоего нерабочего проекта...
вопросы к разработчикам QT ))) это ведь их детище из примеров я только немного своего добавил ))
подозреваю что подвох от принципа наследования
class Window : public QMainWindow, private Ui::Window
но может я не прав ...
«
Последнее редактирование: Февраль 03, 2012, 13:11 от bosfor
»
Записан
Bepec
phpBB Житель матрицы
Offline
Сообщений: 1280
Re: QWebView + javascript + выполнить функцию
«
Ответ #11 :
Февраль 03, 2012, 13:13 »
Это не от разработчиков Qt, это скорее кувалдой подогнанный квадрат, который по идее должен быть круглым
Записан
"Мастер простых решений" © andrew.k
bosfor
Новичок
Offline
Сообщений: 47
Re: QWebView + javascript + выполнить функцию
«
Ответ #12 :
Февраль 03, 2012, 13:16 »
Цитата: Bepec от Февраль 03, 2012, 13:13
Это не от разработчиков Qt, это скорее кувалдой подогнанный квадрат, который по идее должен быть круглым
приведи хоть несколько моментов обработки кувалдой )) очень интересно где все началось не в ту сторону .......
и это я его еще привел к первоначальному варианту оставив только неработающие моменты сути вопраса ))
да, там я дублирую работу в видемом и скрытом QWebView, так как в дальнейшем мне надо будет использовать функцию декодирования в фоне
«
Последнее редактирование: Февраль 03, 2012, 13:23 от bosfor
»
Записан
Bepec
phpBB Житель матрицы
Offline
Сообщений: 1280
Re: QWebView + javascript + выполнить функцию
«
Ответ #13 :
Февраль 03, 2012, 13:24 »
Как вариант у тебя были проблемы, из-за public: функции возврата QByteArray.
Функции, вызываемые в Java должны быть слотами (public slots:).
У тебя в проекте какая-то мешанина из стилей и функционала. Например тот же QNetworkAccess никуда не девшийся.
Сделал свой, чистенький, рабочий проект. Смотри, понимай, пользуйся
Записан
"Мастер простых решений" © andrew.k
bosfor
Новичок
Offline
Сообщений: 47
Re: QWebView + javascript + выполнить функцию
«
Ответ #14 :
Февраль 03, 2012, 13:27 »
Цитата: Bepec от Февраль 03, 2012, 13:24
У тебя в проекте какая-то мешанина из стилей и функционала. Например тот же QNetworkAccess никуда не девшийся.
да заметил позже этот участок - забыл вырезать, в реальности я его использую для перехвата запросов
хоть и на скорую руку чтобы не заморачиваться, но код рабочий у этого класса
Записан
Страниц: [
1
]
2
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
=> Архив
===> Программирование
=====> Python
===> Веб программирование
=====> PHP, PERL, CGI
Загружается...