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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: JavaScript: переопределение объекта screen  (Прочитано 8989 раз)
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« : Март 04, 2010, 22:13 »

Проблема в том, что нужно задать свои свойства у объекта screen (такие как разрешине экрана, глубина цвета, etc.), а имеющиеся в наличии методы webView.page().mainFrame().evaluateJavaScript() и webView.page().mainFrame().addToJavaScriptWindowObject() этого сделать не могут. Пробовал подставлять для evaluateJavaScript():
Код
Java
 String js = "var screen = new Object; " +
         "screen.height = " + this.resolHeight + "; " +
         "screen.width = " + this.resolWidth +"; " +
         "screen.colorDepth = " + this.resolColorDepth + "; ";
 
С addToJavaScriptWindowObject() работал в слоте сигнала javaScriptWindowObjectCleared фрейма:
Код
Java
 QObject obj = new QObject();
 obj.setProperty("height", "800");
 this._webView.page().mainFrame().addToJavaScriptWindowObject("screen", obj);
 
Никак(
И что обидно, браузер хром вроде на движке вебкита, а позволяет так делать.
« Последнее редактирование: Март 04, 2010, 22:18 от serg_hd » Записан

kubuntu/Win7/x64/NetBeans
niXman
Гость
« Ответ #1 : Март 05, 2010, 02:33 »

Цитировать
И что обидно, браузер хром вроде на движке вебкита
сомневаюсь.


Записан
niXman
Гость
« Ответ #2 : Март 05, 2010, 02:36 »

судя по описанию:
тут: http://code.google.com/p/v8/
и тут: http://dev.chromium.org/Home
вебкитом и не пахнет.
Записан
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #3 : Март 05, 2010, 03:03 »

http://ru.wikipedia.org/wiki/WebKit :
"2 сентября 2008 года — компания Google объявила о выпуске собственного браузера Chrome на основе движка WebKit."
Да и не в этом суть. Проблема решаема или нет - вот в чём вопрос.
Записан

kubuntu/Win7/x64/NetBeans
kkk777kkk
Гость
« Ответ #4 : Март 05, 2010, 12:09 »

niXman, если зайдешь в "и другого программного обеспечения с открытым исходным кодом" на твоем скрине, то найдешь там webkit  Подмигивающий
Записан
niXman
Гость
« Ответ #5 : Март 05, 2010, 14:36 »

kkk777kkk, а ссылку можно? Подмигивающий
Записан
kkk777kkk
Гость
« Ответ #6 : Март 05, 2010, 16:32 »



"....І нарешті, оскільки Google Chrome створено на базі WebKit..."

http://www.google.com/chrome/intl/uk/webmasters-faq.html

Записан
niXman
Гость
« Ответ #7 : Март 05, 2010, 19:14 »

не понятно то, что вебкит использует свой яваскрипт движок. так нафига гуглу брать вебкит, и менять в нем яваскрипт движок на свой?
что-то не стыкуется.
Записан
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #8 : Март 06, 2010, 02:36 »

вебкит для qt 4.5 юзает яваскрипт движок SquirrelFish (насколько я понял), а хром другой, видимо, по каким-то своим убеждениям. Кстати интересно ещё, может можно как-то "пересобрать" SquirrelFish? Отменить в нём "private" для объекта screen например)
« Последнее редактирование: Март 06, 2010, 02:38 от serg_hd » Записан

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

на данный момент не нашлось решения?
Записан
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



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

Было почти год назад, мало что помню. Помню только, что пересобирал вебкит со своими изменениями, всё работало как было запланировано. В движке показалось это дело довольно запутанным, но разобраться вполне реально. Из заметок осталось:

1. Для изменения readOnly свойств объектов js надо редактировать файлы с префиксом JS, напр.:
c:\WORK\Qt_4.7.0\src\3rdparty\webkit\WebCore\generated\JSDocument.cpp

Редактировать надо массив (пример - файл JSScreen.cpp):
{ "height", DontDelete, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsScreenHeight), (intptr_t)jsSetScreenHeight },
где jsSetScreenHeight - функция, куда будет передано новое значение свойства, её следует описать.

В класс, где все свойства объекта только на чтение следует добавить метод
void JSScreen::put(ExecState* exec, const Identifier& propertyName, JSValue value, PutPropertySlot& slot)
{
    lookupPut<JSScreen, Base>(exec, propertyName, value, &JSScreenTable, this, slot);
}
Он производит присвоение нового значения свойству.
« Последнее редактирование: Февраль 20, 2011, 20:01 от serg_hd » Записан

kubuntu/Win7/x64/NetBeans
xsentin
Гость
« Ответ #11 : Февраль 21, 2011, 00:29 »

подскажите из этой же темы, можно ли evaluateJavaScript() переопределить navigator.plugins?
если нет, то какими способами можно воспользоваться?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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