Как стать автором
Поиск
Написать публикацию
Обновить

Mouse gestures extension для Chrome 3.0.196.x

Время на прочтение4 мин
Количество просмотров1.9K
На Хабре уже рассказали про замечательное расширение для 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.
Теги:
Хабы:
Всего голосов 7: ↑6 и ↓1+5
Комментарии9

Публикации

Ближайшие события