На Хабре уже рассказали про замечательное расширение для 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, в нем исправляем
на
(простите за большой кусок кода)
upd2: перенес в блог Google Chrome
upd3: внимательный хабраюзер life4beer подсказал, что комментировать совсем не обязательно, достаточно заменить contentWindow на window.
Понять, что расширение не работает именно из-за этого, нетрудно: каждый раз при загрузке любой страницы (при установленном расширении, естественно) в 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.