Russian Qt Forum

Qt => Работа с сетью => Тема начата: serg_hd от Март 04, 2010, 22:13



Название: JavaScript: переопределение объекта screen
Отправлено: serg_hd от Март 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);
 
Никак(
И что обидно, браузер хром вроде на движке вебкита, а позволяет так делать.


Название: Re: JavaScript: переопределение объекта screen
Отправлено: niXman от Март 05, 2010, 02:33
Цитировать
И что обидно, браузер хром вроде на движке вебкита
сомневаюсь.
(http://rghost.ru/1099509/image.png)
(http://rghost.ru/1099512/image.png)


Название: Re: JavaScript: переопределение объекта screen
Отправлено: niXman от Март 05, 2010, 02:36
судя по описанию:
тут: http://code.google.com/p/v8/
и тут: http://dev.chromium.org/Home
вебкитом и не пахнет.


Название: Re: JavaScript: переопределение объекта screen
Отправлено: serg_hd от Март 05, 2010, 03:03
http://ru.wikipedia.org/wiki/WebKit :
"2 сентября 2008 года — компания Google объявила о выпуске собственного браузера Chrome на основе движка WebKit."
Да и не в этом суть. Проблема решаема или нет - вот в чём вопрос.


Название: Re: JavaScript: переопределение объекта screen
Отправлено: kkk777kkk от Март 05, 2010, 12:09
niXman, если зайдешь в "и другого программного обеспечения с открытым исходным кодом" на твоем скрине, то найдешь там webkit  ;)


Название: Re: JavaScript: переопределение объекта screen
Отправлено: niXman от Март 05, 2010, 14:36
kkk777kkk, а ссылку можно? ;)


Название: Re: JavaScript: переопределение объекта screen
Отправлено: kkk777kkk от Март 05, 2010, 16:32


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

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



Название: Re: JavaScript: переопределение объекта screen
Отправлено: niXman от Март 05, 2010, 19:14
не понятно то, что вебкит использует свой яваскрипт движок. так нафига гуглу брать вебкит, и менять в нем яваскрипт движок на свой?
что-то не стыкуется.


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


Название: Re: JavaScript: переопределение объекта screen
Отправлено: xsentin от Февраль 20, 2011, 18:37
на данный момент не нашлось решения?


Название: Re: JavaScript: переопределение объекта screen
Отправлено: serg_hd от Февраль 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);
}
Он производит присвоение нового значения свойству.


Название: Re: JavaScript: переопределение объекта screen
Отправлено: xsentin от Февраль 21, 2011, 00:29
подскажите из этой же темы, можно ли evaluateJavaScript() переопределить navigator.plugins?
если нет, то какими способами можно воспользоваться?