Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Перезапись стандартных объектов... (https://javascript.ru/forum/misc/37856-perezapis-standartnykh-obektov.html)

trent 11.05.2013 02:44

Перезапись стандартных объектов...
 
Здравствуйте уважаемые, нужна помощь...перерыл весь интернет, решение нашел, но не до конца оно, а как закончить идей уже нет (или знаний). Собственно суть в чем, требуется перезапись стандартных объектов, таких как
window.screen
navigator

и тд..а именно их свойств, то что они возвращают, по сути проблем нет если использовать
window.__defineGetter__("innerWidth", function () { return 'new width'; });

В Firefox и Chrome все отлично, так и другие свойства переписать можно, но мне нужно для движка WebKit (В комплекте к Qt идет) и вот тут начинаются жуткие проблемы и геморрой...там какой то урезанный движок яваскрипта, который не воспринимает гетеры...в таком виде.

Вообщем я нашел решение которое выглядит так:
var __originalNavigator = navigator;
navigator = new Object();
navigator.__proto__ = __originalNavigator;
navigator.__defineGetter__('userAgent', function () { return 'Custom'; });

И это то что нужно, но опять возникла проблема, все работает только со свойствами, если в объекте был какой то метод, он больше не работает...
navigator.javaEnabled()

приведет к ошибке, и тут я застрял, товарищи подскажите, существует ли способ таким образом работать/перезаписывать не только свойства но и все методы которые были в оригинальном объекте...Или хотя бы оставить методы рабочими, что то вроде полный клон оригинального объекта. Спасибо...

megaupload 11.05.2013 03:43

var clone = Object.create(obj)

псевдоклон

danik.js 11.05.2013 10:24

Цитата:

Сообщение от trent
Firefox и Chrome все отлично ... но мне нужно для движка WebKit

А ничего, что Chrome и работает на WebKit ?

danik.js 11.05.2013 10:26

Object.defineProperty(navigator, 'userAgent', {
    get: function() { return 'Custom' }
});

Aetae 11.05.2013 12:48

Возвращать функцию, не?

danik.js 11.05.2013 13:45

alert(navigator.javaEnabled())

_javaEnabled = navigator.javaEnabled.bind(navigator);

navigator.javaEnabled = function () { return ! _javaEnabled() }

alert(navigator.javaEnabled())

trent 12.05.2013 22:27

Цитата:

А ничего, что Chrome и работает на WebKit ?
Да, но скриптовый движок, JavaScript, у хрома свой...от сюда и проблемы в QWebKit

Вообщем, ребят, спасибо за ответы, придется пересобирать QWebKit и фиксить самому, т.к все стандатное что работает везде, там не работает, в гетерах/сетерах ошибка...спасибо!


Часовой пояс GMT +3, время: 19:48.