Pull to refresh

Mouse gestures extension для Chrome 3.0.196.x

Reading time4 min
Views1.8K
На Хабре уже рассказали про замечательное расширение для 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.
Tags:
Hubs:
Total votes 7: ↑6 and ↓1+5
Comments9

Articles