Russian Qt Forum

Qt => Работа с сетью => Тема начата: Sahab от Февраль 06, 2011, 15:37



Название: QtWebkit QWebElement JS
Отправлено: Sahab от Февраль 06, 2011, 15:37
Нужно загрузить страницу и добавить JS-функционал.
Не совсем выходит у меня.
Код:
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
ui->webView->load(QUrl("test.htm"));
connect(ui->webView, SIGNAL(loadFinished(bool)), SLOT(debug()));
}

void Widget::debug() {
QWebElement document = ui->webView->page()->mainFrame()->documentElement();
QWebElement element = document.findFirst("script[type=\"text/javascript\"]");
element.appendInside("function Activate() {alert(\"WTF?\")}");
}

если в html странице тег script пустой - то все работает...
но если там уже находится какой-либо JS-код - нет

з.ы. кто-нибудь юзал http://doc.qt.nokia.com/4.7-snapshot/qtwebkit-bridge.html (http://qtwebkit-bridge)?


Название: Re: QtWebkit QWebElement JS
Отправлено: serg_hd от Февраль 06, 2011, 19:30
прикрепил


Название: Re: QtWebkit QWebElement JS
Отправлено: Sahab от Февраль 06, 2011, 20:28
Спасибо за отклик... Но я немного не это имел в виду.
Мне не нужно активировать уже существющий скрипт.
Мне нужно "инъектить" свой (в примере function Activate() {alert(\"WTF?\")})

Возможно я немного запутал названиями ф-ций...


js ф-ция Deactivate() мне нужна была только для показа существующего кода в html
Цитировать
если в html странице тег script пустой - то все работает...
но если там уже находится какой-либо JS-код - нет


Название: Re: QtWebkit QWebElement JS
Отправлено: serg_hd от Февраль 06, 2011, 20:29
да, но
Код
C++ (Qt)
ui->webView->page()->mainFrame()->evaluateJavaScript();
 
для этого вроде как и предназначен. Текст который в методе и есть текст самого яваскрипта и он будет участвовать в DOM'e страницы. Т.е.:
Код
C++ (Qt)
ui->webView->page()->mainFrame()->evaluateJavaScript("alert('!!!')");
 
вызовет яваскриптовский диалог с "!!!", таким образом можно вставить любой свой яваскриптовский код, либо изменить существующий, в коде там указано на какой сигнал это делать.
Хотя возможно я чего-то недопонимаю...


Название: Re: QtWebkit QWebElement JS
Отправлено: Sahab от Февраль 06, 2011, 20:33
Допустим у меня есть кнопка по нажатию на которую должна выполняться ф-ция Activate(), которой в данный момент нет в исходном html
Задача "добавить необходимую" в html для того чтоб обрабатывалось нажатие



Название: Re: QtWebkit QWebElement JS
Отправлено: serg_hd от Февраль 06, 2011, 20:38
Допустим у меня есть кнопка по нажатию на которую должна выполняться ф-ция Activate(), которой в данный момент нет в исходном html
Задача "добавить необходимую" в html для того чтоб обрабатывалось нажатие


В этом поможет сам яваскрипт, надо просто найти эту кнопку с помощью яваскрипта. Наверное года два на нём не писал, но, к примеру если кнопка имеет аттрибут id = "xxx", то найти её можно по нему, примерный код:
Код
Javascript
document.getElementById("xxx").onclick = myfunc();
 

или по имени (опять же примерный, в гугле полно реализаций)
Код
Javascript
document.getElementsByName("mybutton")[0].onclick = myfunc()
 
Этот яваскрипт-код и внедрять через evaluateJavaScript()


Название: Re: QtWebkit QWebElement JS
Отправлено: serg_hd от Февраль 06, 2011, 20:41
Кстати проверь ещё насчёт  void QWebElement::setAttribute ( const QString & name, const QString & value )
Может прокатит что-то вроде
Код
C++ (Qt)
webElement->setAttribute ("onclick", "myfunc(alert('!!!'))");
 
Но я делал подобное всё-таки со стороны самого яваскрипта


Название: Re: QtWebkit QWebElement JS
Отправлено: Sahab от Февраль 06, 2011, 20:42
Цитировать
Задача "добавить необходимую" JS-ф-цию в html для того чтоб обрабатывалось нажатие
Не назначать ее... А реализовать!


Название: Re: QtWebkit QWebElement JS
Отправлено: serg_hd от Февраль 06, 2011, 20:50
прикрепил. Т.е. в html есть только вызов функции activate(). Затем ты её реализовываешь и код сработает при клике по кнопке. Оно?


Название: Re: QtWebkit QWebElement JS
Отправлено: Sahab от Февраль 06, 2011, 20:57
Спасибо, то что нужно. Никогда бы не подумал, что так возможно.
а это  http://doc.qt.nokia.com/4.7-snapshot/qtwebkit-bridge.html (http://qtwebkit-bridge) не использовал никогда?
имею в виду связку объектов с++ и js


Название: Re: QtWebkit QWebElement JS
Отправлено: serg_hd от Февраль 06, 2011, 21:04
Спасибо, то что нужно. Никогда бы не подумал, что так возможно.
а это  http://doc.qt.nokia.com/4.7-snapshot/qtwebkit-bridge.html (http://qtwebkit-bridge) не использовал никогда?
имею в виду связку объектов с++ и js

Тоже пробовал, давно правда. Смысл в том, что проводится аналогия между Qt-обьектами и яваскриптом. Т.е. в страницы можно внедрять различные members твоего qt-объекта, которые будут видны яваскрипту. Пробовал ради интереса, когда переписывал под себя вебкитовкий яваскрипт-движок (надо было некоторые private properties сделать public). Получалось, но не использовал, т.к. на тот момент не было необходимости, штука действ. полезная.