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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QtWebkit QWebElement JS  (Прочитано 6980 раз)
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?
Записан
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #1 : Февраль 06, 2011, 19:30 »

прикрепил
« Последнее редактирование: Февраль 06, 2011, 19:41 от serg_hd » Записан

kubuntu/Win7/x64/NetBeans
Sahab
Гость
« Ответ #2 : Февраль 06, 2011, 20:28 »

Спасибо за отклик... Но я немного не это имел в виду.
Мне не нужно активировать уже существющий скрипт.
Мне нужно "инъектить" свой (в примере function Activate() {alert(\"WTF?\")})

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


js ф-ция Deactivate() мне нужна была только для показа существующего кода в html
Цитировать
если в html странице тег script пустой - то все работает...
но если там уже находится какой-либо JS-код - нет
« Последнее редактирование: Февраль 06, 2011, 20:29 от Sahab » Записан
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #3 : Февраль 06, 2011, 20:29 »

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

kubuntu/Win7/x64/NetBeans
Sahab
Гость
« Ответ #4 : Февраль 06, 2011, 20:33 »

Допустим у меня есть кнопка по нажатию на которую должна выполняться ф-ция Activate(), которой в данный момент нет в исходном html
Задача "добавить необходимую" в html для того чтоб обрабатывалось нажатие

Записан
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #5 : Февраль 06, 2011, 20:38 »

Допустим у меня есть кнопка по нажатию на которую должна выполняться ф-ция Activate(), которой в данный момент нет в исходном html
Задача "добавить необходимую" в html для того чтоб обрабатывалось нажатие


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

или по имени (опять же примерный, в гугле полно реализаций)
Код
Javascript
document.getElementsByName("mybutton")[0].onclick = myfunc()
 
Этот яваскрипт-код и внедрять через evaluateJavaScript()
« Последнее редактирование: Февраль 06, 2011, 20:44 от serg_hd » Записан

kubuntu/Win7/x64/NetBeans
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #6 : Февраль 06, 2011, 20:41 »

Кстати проверь ещё насчёт  void QWebElement::setAttribute ( const QString & name, const QString & value )
Может прокатит что-то вроде
Код
C++ (Qt)
webElement->setAttribute ("onclick", "myfunc(alert('!!!'))");
 
Но я делал подобное всё-таки со стороны самого яваскрипта
« Последнее редактирование: Февраль 07, 2011, 04:15 от serg_hd » Записан

kubuntu/Win7/x64/NetBeans
Sahab
Гость
« Ответ #7 : Февраль 06, 2011, 20:42 »

Цитировать
Задача "добавить необходимую" JS-ф-цию в html для того чтоб обрабатывалось нажатие
Не назначать ее... А реализовать!
Записан
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #8 : Февраль 06, 2011, 20:50 »

прикрепил. Т.е. в html есть только вызов функции activate(). Затем ты её реализовываешь и код сработает при клике по кнопке. Оно?
« Последнее редактирование: Февраль 06, 2011, 21:14 от serg_hd » Записан

kubuntu/Win7/x64/NetBeans
Sahab
Гость
« Ответ #9 : Февраль 06, 2011, 20:57 »

Спасибо, то что нужно. Никогда бы не подумал, что так возможно.
а это  http://doc.qt.nokia.com/4.7-snapshot/qtwebkit-bridge.html не использовал никогда?
имею в виду связку объектов с++ и js
Записан
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #10 : Февраль 06, 2011, 21:04 »

Спасибо, то что нужно. Никогда бы не подумал, что так возможно.
а это  http://doc.qt.nokia.com/4.7-snapshot/qtwebkit-bridge.html не использовал никогда?
имею в виду связку объектов с++ и js

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

kubuntu/Win7/x64/NetBeans
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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