Russian Qt Forum

Qt => Работа с сетью => Тема начата: ufna от Декабря 12, 2009, 01:06



Название: QWebView, проблемы идентификации
Отправлено: ufna от Декабря 12, 2009, 01:06
Добрый день,


Нужно сделать так, чтобы яваскрипт знал WebKit'овский браузер как IE, а не Netscape. Грубо говоря, должен обходить простую проверку на navigator.appName. Совершенно не могу понять как :(


Название: Re: QWebView, проблемы идентификации
Отправлено: sendevent от Декабря 12, 2009, 01:19
задать юзер-агент IE'шный.
*добавлено чуть подумав: наверное. =)


Название: Re: QWebView, проблемы идентификации
Отправлено: ufna от Декабря 12, 2009, 01:38
На самом деле счас покопался, это в вебките зашито просто так:
Код
C++ (Qt)
String NavigatorBase::appName() const
{
   return "Netscape";
}
 
Т.е. грубо говоря только Qt перекомпиливать и строку менять :(


юзер-агент обманывает только пхп и подобное, но не яву.


Название: Re: QWebView, проблемы идентификации
Отправлено: SABROG от Декабря 12, 2009, 09:35
Проще этот самый JavaScript подредактировать на лету и отправить на сервер любую другую информацию.


Название: Re: QWebView, проблемы идентификации
Отправлено: serg_hd от Декабря 12, 2009, 12:23
юзер-агент обманывает только пхп и подобное, но не яву.
Что ты имеешь ввиду? Т.е. хочешь сказать если я укажу
Код
Java
this.userAgent = "Chrome/3.0.195.33";
myReq.setRawHeader( new QByteArray("User-Agent"), new QByteArray(this.userAgent) );
 
то явовский код сайта этому не поверит? И вообще, о чём речь - о java или javascript???


Название: Re: QWebView, проблемы идентификации
Отправлено: sendevent от Декабря 12, 2009, 16:09
юзер-агент обманывает только пхп и подобное, но не яву.
Что ты имеешь ввиду? Т.е. хочешь сказать если я укажу
Код
Java
this.userAgent = "Chrome/3.0.195.33";
myReq.setRawHeader( new QByteArray("User-Agent"), new QByteArray(this.userAgent) );
 
то явовский код сайта этому не поверит? И вообще, о чём речь - о java или javascript???

речь идет о жабоскрипте.
твой пример кода обманет серверную часть на любом языке (пройдет проверку через $_SERVER['HTTP_CLIENT'], или как оно там).
но джавоскриптовый navigator.appName - клиентсайд, ему накакать на твои хттп-заголовки, важнее чего вкомпиллено в его движок. а вкомпиллено действительно "Netscape" - ufna абсолютно прав.
чтобы обойти - надо в NavigatorBase завести пропертю, ей сделать паблик сеттер, поднять его до уровня QtWebKit - работы не много, но пересобирать весь модуль - очень уж лениво.


Название: Re: QWebView, проблемы идентификации
Отправлено: serg_hd от Декабря 12, 2009, 17:19
вот, другое дело, всё понятно)


Название: Re: QWebView, проблемы идентификации
Отправлено: serg_hd от Декабря 16, 2009, 18:31
Всё проще.
Тут основную роль сыграют базовые знания js - переопределяем navigator:
Код
Java
qwebview.page().mainFrame().evaluateJavaScript("var navigator = new Object; navigator.appName = 'Mozilla/4.0 (compatible; MSIE 6.0; Win32)';");
...
qwebview.load(url);
 
На qt jambi я пробовал, всё нормально.