Russian Qt Forum

Qt => Работа с сетью => Тема начата: IGreench от Декабрь 19, 2012, 23:07



Название: [Решено] Открытие ссылки в новом QWebView
Отправлено: IGreench от Декабрь 19, 2012, 23:07
Доброе время суток!

Пишу специализированный браузер для сайта, чтобы было что-то типа дестктопной версии.
С linkClicked(QUrl url) всё понятно. Переопределил метод, и вызываю при особых условиях load(url).
А вот, что делать с urlChanged(QUrl url)? Как переопределить метод (и какой метод) для запрета загрузки некоторых url?

Поискал, ничего не нашёл, где обошлось бы без особого шаманства с QNetwork...

Решение:
Завязываем changed на слот, в котором пишем аля
Код:
if (!siteName.contains("prog.org.ru"))
{  
    stop();
    back();
}


UPD: пока что временно нашёл, как обойти эту проблему. Но возникла новая...

Задача: есть два qwebview, на одном я захожу на сайт, авторизуюсь, работаю. Но определённые ссылки нужно открыть на втором qwebview. А так как параметры сессии отсутствуют у него, то не получается нужного результата. Как передать параметры сессии, не нашёл, есть идея - передовать post запросом параметры сессии, но это как то неправильно, и пока я не знаю, насколько это возможно сделать. Еще ковырялся с qwebpage, но смог только перенести состояние с первого qwebview на второй, с блокировкой первого.

Решение:
Как-то так.
Код
C++ (Qt)
QNetworkCookieJar *cookieJar = new QNetworkCookieJar();
webView1->page->networkAccessManager()->setCookieJar(cookieJar);
cookieJar->setParent(0);
webView2->page->networkAccessManager()->setCookieJar(cookieJar);
cookieJar->setParent(0);
2SimpleSunny Спасибо!

написал
Код:
webView_2->page()->networkAccessManager()->setCookieJar(webView->page()->networkAccessManager()->cookieJar());
webView_2->load(url);
и всё ништяк стало.

UPD:

Всем привет!
Возвращаюсь ко своим баранам.

Этот способ:
Завязываем changed на слот, в котором пишем аля
Код:
if (!siteName.contains("prog.org.ru"))
{  
    stop();
    back();
}
не работает так, как нужно. Нужно чтобы, первый webView не проходил по ссылке.
Я сделал две QWebPage. Работая с первой webPage, я перехватываю в urlChanged и linkClicked нужную ссылку и делаю setPage() от неё во второй webView. Но я не знаю, как отлавливать input'ы от второго webView (mouseEvents хотя бы) и применять непосредственно к этой webPage.

Решение:
в хедере:
Код:
static QWebPage *page1;
static QWebPage *page2;

в событиях urlChanged и linkClicked при нужной ссылке:
Код:
page2->networkAccessManager()->setCookieJar(page1->networkAccessManager()->cookieJar());
webView->setPage(page2);
webView->load(QUrl("http://..."));
webView_2->setPage(page1);


Название: Re: Открытие ссылки в новом QWebView
Отправлено: IGreench от Декабрь 21, 2012, 12:51
Помогите пожалуйста! Очень очень надо...


Название: Re: Открытие ссылки в новом QWebView
Отправлено: Bepec от Декабрь 21, 2012, 13:15
Завязываем changed на слот, в котором пишем аля
Код:
if (!siteName.contains("prog.org.ru"))
{   
    stop();
    back();
}


Название: Re: Открытие ссылки в новом QWebView
Отправлено: IGreench от Декабрь 21, 2012, 14:08
Спасибо! Всё работает!

А можете подсказать, касательно клика по ссылке в одном qweview и её открытия в другом qwebview с настройками первого?


Название: Re: Открытие ссылки в новом QWebView
Отправлено: Bepec от Декабрь 21, 2012, 14:17
ХЗ о каких настройках вы говорите. Если о сетевых, можно применить QNetworkSetting от первого на второй. Хотя мб я и ошибаюсь и они глобальные.


Название: Re: Открытие ссылки в новом QWebView
Отправлено: IGreench от Декабрь 21, 2012, 19:42
На сайте пользователь авторизуется с помощью сессии (я про $_SESSION[]). Но другой qwebview же не знает, что это за сессия...


Название: Re: Открытие ссылки в новом QWebView
Отправлено: Bepec от Декабрь 21, 2012, 19:58
Я не силён в internet технологиях, но эта сессия являет собой что? Кеш?


Название: Re: Открытие ссылки в новом QWebView
Отправлено: IGreench от Декабрь 21, 2012, 20:26
я тоже не силён, но я знаю что это что-то типа куков)


Название: Re: Открытие ссылки в новом QWebView
Отправлено: SimpleSunny от Декабрь 21, 2012, 20:53
Как-то так.
Код
C++ (Qt)
QNetworkCookieJar *cookieJar = new QNetworkCookieJar();
webView1->page->networkAccessManager()->setCookieJar(cookieJar);
cookieJar->setParent(0);
webView2->page->networkAccessManager()->setCookieJar(cookieJar);
cookieJar->setParent(0);


Название: Re: Открытие ссылки в новом QWebView
Отправлено: IGreench от Декабрь 21, 2012, 21:39
2SimpleSunny Спасибо!

написал
Код:
ui->webView_2->page()->networkAccessManager()->setCookieJar(ui->webView->page()->networkAccessManager()->cookieJar());
ui->webView_2->load(url);
и всё ништяк стало.

Так и знал, что всё примерно так просто. Спасибо всем откликнувшимся!


Название: Re: Открытие ссылки в новом QWebView
Отправлено: IGreench от Март 09, 2013, 23:15
Всем привет!
Возвращаюсь ко своим баранам.

Этот способ:
Завязываем changed на слот, в котором пишем аля
Код:
if (!siteName.contains("prog.org.ru"))
{  
    stop();
    back();
}
не работает так, как нужно. Нужно чтобы, первый webView не проходил по ссылке.
Я сделал две QWebPage. Работая с первой webPage, я перехватываю в urlChanged и linkClicked нужную ссылку и делаю setPage() от неё во второй webView. Но я не знаю, как отлавливать input'ы от второго webView (mouseEvents хотя бы) и применять непосредственно к этой webPage.

Буду рад любой помощи :)

Зараннее спасибо


Название: Re: Открытие ссылки в новом QWebView
Отправлено: Bepec от Март 09, 2013, 23:18
Класс менеджер тебе нужен по ходу, хотя мысль твоя не совсем мне ясна в час ночи :D


Название: Re: Открытие ссылки в новом QWebView
Отправлено: IGreench от Март 10, 2013, 00:20
А что за класс менеджер?)

Всё... мне спать пора)
сделал qwebpage'ы статик и всё заработало.
ура! =)