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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Крах WebView [РЕШЕНО]  (Прочитано 5290 раз)
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 а отключал яваскрипт в другой. По поводу первого - вопрос открыт, но скорее всего мои косяки.
« Последнее редактирование: Апрель 10, 2012, 12:07 от RealDuke » Записан
Bepec
Гость
« Ответ #1 : Апрель 09, 2012, 14:35 »

Телепаты! Телепаты! Бегите скорее сюда - нужно код оттелепатировать из проекта создателя темы!!!
Записан
RealDuke
Гость
« Ответ #2 : Апрель 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()));

результат парсю и отсылаю пост(если не моя ставка) \ посылаю гет запрос (если моя) а результат опять парсю.
Иногда получаю что в процессе парсинга (между получением данных и отсылкой) кто-то поставил ту же цену или ниже, я отсылаю устаревшие данные, вылазит окно яваскриптовое с предупреждением о том что моя ставка некорректна. Как бы я с ним не бился, победить не могу.
Записан
Bepec
Гость
« Ответ #3 : Апрель 09, 2012, 15:00 »

Телепаты ещё не пришли, извиняй.

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

PS я такой недогадливый, неправда ли?
Записан
V1KT0P
Гость
« Ответ #4 : Апрель 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, всё заработало, крашиться перестало.
А бэктрейс что говорит?
Записан
RealDuke
Гость
« Ответ #5 : Апрель 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) 
Вроде бы и блокирует открывание новых окон яваскриптом, но аттрибут не работает.
« Последнее редактирование: Апрель 10, 2012, 10:31 от RealDuke » Записан
Bepec
Гость
« Ответ #6 : Апрель 10, 2012, 10:52 »

Да у тебя скорее всего в коде что-то не то. Где то портишь память и усё.

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

PS Qt WebKit 4.8(точнее 4.9.0), это как?
Записан
QuAzI
Гость
« Ответ #7 : Апрель 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
Записан
RealDuke
Гость
« Ответ #8 : Апрель 10, 2012, 11:12 »

Да у тебя скорее всего в коде что-то не то. Где то портишь память и усё.

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

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


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