Google Chrome

индекс
223,70

Mouse gestures extension для Chrome 3.0.196.x

На Хабре уже рассказали про замечательное расширение для Chrome, позволяющее управлять мышежестами. Но начиная с версии 3.0.196.0 из JS-движка Хрома (поправьте, если ошибаюсь) пропал объект contentWindow (вот тут Аарон Будмэн рассказывает зачем и почему), который в указанном расширении использовался. В текущей версии chromegestures (1.0.7) проблема еще не устранена.

Понять, что расширение не работает именно из-за этого, нетрудно: каждый раз при загрузке любой страницы (при установленном расширении, естественно) в DeveloperTools появляется сообщение об ошибке «contentWindow is not defined».

Попробовать gestures в Хроме очень хотелось, поэтому я пошел в ChromeGestures.user.js и тупо закомментировал все 4 строчки с использованием contentWindow (как выяснилось позже, это совсем не обязательно, читаем внизу upd3). Очевидно, что после такой жестокости что-то работать не будет или будет работать не так (читать код не очень хотелось, да и не настолько силен я в js), но на данный момент это лучше, чем ничего =) Возможно, кому-то пригодится.

upd:
Небольшой мануал.
Идем в C:\Documents and Settings\Administrator\Local Settings\Application Data\Google\Chrome\User Data\Default\Extensions\chlbjhngbajmncdidibolcjokpchfhlf\1.0.7\ (WinXP. В Висте должно быть что-то вроде C:\Users\Local\AppData\… и дальше аналогично). Не уверен, правда, что выделенная жирным часть у всех будет одной и той же. Находим там упомянутый ChromeGestures.user.js, в нем исправляем
function getData(ntpurl,delta,captime,clickto){
        newTabURL = ntpurl;
        ChromeGesture.MINIMUM_DELTAY = delta;
        ChromeGesture.MINIMUM_DELTAX = delta;
        ChromeGesture.DELAY_BETWEEN_CAPTURES = captime;
        ChromeGesture.CLICK_TIMEOUT = clickto;
        if(popupLoader && contentWindow.CHROMEGESTURES_loadData){
                wind.close();
                contentWindow.CHROMEGESTURES_loadData = false
                wind = null;
                
        }
}
if(!us)contentWindow.CHROMEGESTURES_setData = getData;

// LOAD SAVED DATA
if(!us){
        if(popupLoader){
                contentWindow.CHROMEGESTURES_loadData = true;
                wind = window.open("chrome-extension://"+chrome.extension.id_+"/options.html","_blank",
                        "directories=no,height=1,width=1,left=-100,top=-100,location=no,"+
                        "menubar=no,scrollbars=no,status=no,titlebar=no,toolbar=no");
        }


* This source code was highlighted with Source Code Highlighter.

на
function getData(ntpurl,delta,captime,clickto){
        newTabURL = ntpurl;
        ChromeGesture.MINIMUM_DELTAY = delta;
        ChromeGesture.MINIMUM_DELTAX = delta;
        ChromeGesture.DELAY_BETWEEN_CAPTURES = captime;
        ChromeGesture.CLICK_TIMEOUT = clickto;
        if(popupLoader /*&& contentWindow.CHROMEGESTURES_loadData*/){
                wind.close();
                //contentWindow.CHROMEGESTURES_loadData = false
                wind = null;
                
        }
}
//if(!us)contentWindow.CHROMEGESTURES_setData = getData;

// LOAD SAVED DATA
if(!us){
        if(popupLoader){
                //contentWindow.CHROMEGESTURES_loadData = true;
                wind = window.open("chrome-extension://"+chrome.extension.id_+"/options.html","_blank",
                        "directories=no,height=1,width=1,left=-100,top=-100,location=no,"+
                        "menubar=no,scrollbars=no,status=no,titlebar=no,toolbar=no");
        }


* This source code was highlighted with Source Code Highlighter.

(простите за большой кусок кода)

upd2: перенес в блог Google Chrome

upd3: внимательный хабраюзер life4beerподсказал, что комментировать совсем не обязательно, достаточно заменить contentWindow на window.
+5
7 августа 2009, 16:09
1

комментарии (9)

–3
Vitality #
тупо закомментировал весь топик
0
Yeah #
Покажи код, который закоментировал.
0
Yeah #
Ну, в принципе, ничего особо важного, возможно будут глюки с открыванием окна опций.
0
MaxxArts #
Добавил кусок кода с комментами
+1
life4beer #
Спасибо за инфу, сам бы поленился разбираться.
Имхо, лучше не коментировать эти строки, а заменить «contentWindow» на «window». Там, по Вашей ссылке, Аарон пишет: «In most cases, the „window“ object in a content script will do what you want».

0
MaxxArts #
Пробовал, не работает. In most, видимо, да не in all =)
+1
life4beer #
У меня всё работает. А что в DeveloperTools? Появляются какие-то сообщения?
0
MaxxArts #
Прошу прощения, видимо, как-то не так пробовал) Действительно, все работает. Только окошко help не открывается. Точнее открывается, но пустое.
0
life4beer #
Ага. Что-то они намудрили с window.open
Во-первых оно сейчас стало блокироваться popup блокером, во-вторых ничего не возвращает.
Соответственно после открытия окна попытка обратится к win.document кидает ошибку. Но так как help не критичен, а решение временное, то я париться не буду:) Подожду официального фикса…

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.