Russian Qt Forum

Qt => Работа с сетью => Тема начата: RealDuke от Апрель 09, 2012, 14:28



Название: Крах WebView [РЕШЕНО]
Отправлено: RealDuke от Апрель 09, 2012, 14:28
Здравствуйте. У меня собственно 2 вопроса.
1.Поставил SDK Win offline 1.2 (4.8.0). До этого стоял SDK 2010.02.1 open sourse (4.6.2). Был рабочий проект с вебкитом, который корректно работал. Перевёл его на 4.8.0 стал крашиться при загрузке страницы (вызов WebView->page() ). Что дебаг что релиз. Подсовывал исполняемому библиотеки, крашился по прежнему. Обратил внимание на версии библиотек, все были 4.8.0 КРОМЕ вебкита, который был 4.9.0(!!!) Что это? Ошибка или так задумано? :) Поменял на библиотеки 4.7.4, всё заработало, крашиться перестало.
2. И такой второй вопрос, при загрузке страницы вылазит яваскриптовое аллерт-окно, блокирующее полностью работу программы. Как убрать \ не вызывать его не знаю, пробовал  

Код:
m_pwv->settings()->setAttribute(QWebSettings::JavascriptEnabled, false);
m_pwv->settings()->setAttribute(QWebSettings::JavascriptCanOpenWindows, false); // по идее по умолчанию

Не помогает, остальную яву блочит, а окно вылезает и блокирует программу пока его не закроешь. Подскажите, пожалуйста.

Update: разобрался. По поводу 2-го вопроса сам виноват, невнимателен был, ответ от сервера ставил в одну QPage а отключал яваскрипт в другой. По поводу первого - вопрос открыт, но скорее всего мои косяки.


Название: Re: Крах WebView
Отправлено: Bepec от Апрель 09, 2012, 14:35
Телепаты! Телепаты! Бегите скорее сюда - нужно код оттелепатировать из проекта создателя темы!!!


Название: Re: Крах WebView
Отправлено: RealDuke от Апрель 09, 2012, 14:57
Да собственно всё банально. Использую WebView для отображения страницы, и его унаследованный от QNetworkAccessManager менеджер для посылки запросов.
Код:
QNetworkReply *replyFromServer = networkManager->get(QNetworkRequest(m_pwv->url()));
connect(replyFromServer,SIGNAL(finished()),this,SLOT(recivedReplyForParsing()));
Отсылаю гет запрос на сервер. Парсю полученные данные, определяю цену на товар, выставляю её на 100р. ниже и отсылаю назад
Код:
QNetworkReply *replyFromServer = networkManager->post(postRequest,data.toUtf8());
connect(replyFromServer,SIGNAL(finished()),this,SLOT(recivedReplyForParsing()));

результат парсю и отсылаю пост(если не моя ставка) \ посылаю гет запрос (если моя) а результат опять парсю.
Иногда получаю что в процессе парсинга (между получением данных и отсылкой) кто-то поставил ту же цену или ниже, я отсылаю устаревшие данные, вылазит окно яваскриптовое с предупреждением о том что моя ставка некорректна. Как бы я с ним не бился, победить не могу.


Название: Re: Крах WebView
Отправлено: Bepec от Апрель 09, 2012, 15:00
Телепаты ещё не пришли, извиняй.

Особенно жаль, что они не определили куда ты отсылаешь, как отсылаешь, зачем отсылаешь, что меняешь, где меняешь, как меняешь, куда отправляешь, где устаревает информация, где меняется информация, кто поставил ту же цену и откуда всё же вылазит яваскриптовое окно с предупреждением.

PS я такой недогадливый, неправда ли?


Название: Re: Крах WebView
Отправлено: V1KT0P от Апрель 09, 2012, 15:12
1.Поставил SDK Win offline 1.2 (4.8.0). До этого стоял SDK 2010.02.1 open sourse (4.6.2). Был рабочий проект с вебкитом, который корректно работал. Перевёл его на 4.8.0 стал крашиться при загрузке страницы (вызов WebView->page() ). Что дебаг что релиз. Подсовывал исполняемому библиотеки, крашился по прежнему. Обратил внимание на версии библиотек, все были 4.8.0 КРОМЕ вебкита, который был 4.9.0(!!!) Что это? Ошибка или так задумано? :) Поменял на библиотеки 4.7.4, всё заработало, крашиться перестало.
А бэктрейс что говорит?


Название: Re: Крах WebView
Отправлено: RealDuke от Апрель 10, 2012, 10:28
Бектрейс:
0   WebCore::Frame::page() const   E:\QtSDK\Desktop\Qt\4.8.0\mingw\bin\QtWebKitd4.dll   0   0xb8acdba   
...
Выдаёт SIGSEGV

Определил что любое js:allert(), confirm(), prompt() выдаёт SIGSEGV в вебките 4.8.0(точнее он 4.9.0). Повторяюсь, при подстановке в бинарник(линковка динамическая, конечно)  4.7.4 библиотеки, модальные яваскриптовые окошки проходят. Теперь вопрос как мне сделать так чтоб не выскакивали allert() окошки? Может это где-то настраивается или вручную нужно определять? Вроде в асистенте посмотрел
Код:
Protected virtual QWebView *	createWindow ( QWebPage::WebWindowType type ) 
если создавать производный класс, и там блокировать, но не уверен что сработает, т.к.
Код:
webView->settings()->setAttribute(QWebSettings::JavascriptCanOpenWindows, false) 
Вроде бы и блокирует открывание новых окон яваскриптом, но аттрибут не работает.


Название: Re: Крах WebView
Отправлено: Bepec от Апрель 10, 2012, 10:52
Да у тебя скорее всего в коде что-то не то. Где то портишь память и усё.

Хотя шанс что это ошибка в Qt есть.

PS Qt WebKit 4.8(точнее 4.9.0), это как?


Название: Re: Крах WebView
Отправлено: QuAzI от Апрель 10, 2012, 10:57
PS Qt WebKit 4.8(точнее 4.9.0), это как?
А вот как на скрине. SDK 1.2, полный путь до либы D:\QtSDK\Desktop\Qt\4.8.0\mingw\bin\QtWebKit4.dll
Все остальные как и надо 4.8.0


Название: Re: Крах WebView
Отправлено: RealDuke от Апрель 10, 2012, 11:12
Да у тебя скорее всего в коде что-то не то. Где то портишь память и усё.

Хотя шанс что это ошибка в Qt есть.

PS Qt WebKit 4.8(точнее 4.9.0), это как?
Возможно. Но ради интереса попробовал бы кто-нибудь на 4.8.0 сгенерировать js:allert(). Если не вылетит, значит действительно у меня проблема.