Полезная информация

Юристы зарабатывают огромные деньги и славу, оперируя хорошим знанием законов. Правила форума — простой путь к успешному общению.

№705120-10-2013 19:09:55

Andrey_Krropotkin
Участник
 
Группа: Members
Зарегистрирован: 11-11-2011
Сообщений: 484
UA: Firefox 24.0

Re: Custom Buttons

Вопрос к знатокам.

Есть код - перевод страницы  в новой вкладке, после исходной :
var GooglePageNew_translate = function(){ 
    var url = "http://translate.google.com/translate?u=" + content.location + "&hl=ru&ie=UTF-8&sl=auto&tl=ru";
    setTimeout(function() {
           gBrowser.selectedTab = gBrowser.duplicateTab( gBrowser.mCurrentTab );           
           gBrowser.addEventListener("pageshow", function(e) {
              this.removeEventListener("pageshow", arguments.callee, true);
              content.document.location = url;
              }, true);
         }, 50)
    var css = '@-moz-document domain("translate.google.com") {\
       #gb, #gt-c:not([class="g-section"]) { display: none !important; }\
       #contentframe { top: 0 !important; }\
               }';
       var uri = makeURI("data:text/css," + encodeURIComponent(css));
       var sss = Cc["@mozilla.org/content/style-sheet-service;1"]. getService(Ci.nsIStyleSheetService);
       try { sss.unregisterSheet(uri, sss.AGENT_SHEET) }
       catch(e) { sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET) }; 

};

Назначаю для этой функции горячую клавишу, допустим:
var Key = 120; // Соответствует F9
addEventListener('keydown', function(e){
        if(!e.shiftKey && !e.ctrlKey && !e.altKey && e.keyCode == Key)GooglePageNew_translate();
        }, false);

В результате при нажатии на горячую клавишу функция срабатывает дважды, т.е. открываются две вкладки с переводом после исходной.
Если эту функцию  addEventListener('keydown', function(e) использовать например для перевода в текущей вкладке вопросов с горячей клавишей не возникает, все происходит в штатном порядке.
Почему так получается и как это исправить или как тогда по другому назначить горячую клавишу?

Отсутствует

 

№705220-10-2013 19:52:42

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 3.6

Re: Custom Buttons

Andrey_Krropotkin

Выделить код

Код:

function translatePage() {
   var url = "http://translate.google.com/translate?u=" + content.location + "&hl=ru&ie=UTF-8&sl=auto&tl=ru";
   var x = gBrowser.mCurrentTab._tPos +1;
   gBrowser.moveTabTo( gBrowser.selectedTab = gBrowser.addTab(url), x); 
};    
    
var Key = 120; // Соответствует F9
addEventListener('keydown', function(e){
   if(!e.shiftKey && !e.ctrlKey && !e.altKey && e.keyCode == Key) translatePage();
}, false, window );

var css = '@-moz-document domain("translate.google.com") {\
          #gb, #gt-c:not([class="g-section"]) { display: none !important; }\
          #contentframe { top: 0 !important; }\
          }';
var uri = makeURI("data:text/css," + encodeURIComponent(css));
var sss = Cc["@mozilla.org/content/style-sheet-service;1"]. getService(Ci.nsIStyleSheetService);
sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);
addDestructor(function() { sss.unregisterSheet( uri, sss.AGENT_SHEET ) });

Добавлено 20-10-2013 19:59:34
или:

Выделить код

Код:

addEventListener('keydown', function(e) {
   if ( !e.shiftKey && !e.ctrlKey && !e.altKey && e.keyCode == 120 ) {
        var url = "http://translate.google.com/translate?u=" + content.location + "&hl=ru&ie=UTF-8&sl=auto&tl=ru";
        var x = gBrowser.mCurrentTab._tPos +1;
        gBrowser.moveTabTo( gBrowser.selectedTab = gBrowser.addTab(url), x); 
       } 
}, false, window );

var css = '@-moz-document domain("translate.google.com") {\
          #gb, #gt-c:not([class="g-section"]) { display: none !important; }\
          #contentframe { top: 0 !important; }\
          }';
var uri = makeURI("data:text/css," + encodeURIComponent(css));
var sss = Cc["@mozilla.org/content/style-sheet-service;1"]. getService(Ci.nsIStyleSheetService);
sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);
addDestructor(function() { sss.unregisterSheet( uri, sss.AGENT_SHEET ) });

Добавлено 20-10-2013 20:02:14
И возможно:

Выделить код

Код:

@-moz-document domain("translate.google.com") {
#gb, #gt-c:not([class="g-section"]) { display: none !important; }
#contentframe { top: 0 !important; }
}

работает через userContent.css

Отредактировано bunda1 (20-10-2013 20:02:14)

Отсутствует

 

№705320-10-2013 20:30:53

Andrey_Krropotkin
Участник
 
Группа: Members
Зарегистрирован: 11-11-2011
Сообщений: 484
UA: Firefox 24.0

Re: Custom Buttons

bunda1 спасибо, проверил, даже на чистом профиле открываются все равно две вкладки после исходной.

И еще один вопрос?
В этой функции я хочу заменить translatePage() на переменную:
addEventListener('keydown', function(e){
   if(!e.shiftKey && !e.ctrlKey && !e.altKey && e.keyCode == Key) trans;
}, false, window );

Например:
var trans = translatePage();
var trans = "translatePage()";

В первом случае пишет что trans - не функция
Во втором просто не реагирует.

Отредактировано Andrey_Krropotkin (20-10-2013 22:16:43)

Отсутствует

 

№705420-10-2013 21:31:07

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 3.6

Re: Custom Buttons

Andrey_Krropotkin пишет

bunda1 спасибо, проверил, даже на чистом профиле открываются все равно две вкладки после исходной.

Я проверил у меня открывает одну вкладку, ты что то делаешь не правильно.

Выделить код

Код:

var trans = translatePage();
var trans = "translatePage()";

Во втором случае trans это просто текст.

Отредактировано bunda1 (20-10-2013 21:36:26)

Отсутствует

 

№705520-10-2013 22:15:45

Andrey_Krropotkin
Участник
 
Группа: Members
Зарегистрирован: 11-11-2011
Сообщений: 484
UA: Firefox 24.0

Re: Custom Buttons

okkamas_knife мне тоже понято что у меня не правильно, а как тогда правильно сделать?
Смысл такой я хочу определить клавиши для разных типов перевода:
для текста - в окне, в новой вкладке; 
для страниц - в том же окне и в новой вкладке; 
После этого выбрать один из нескольких переводчиков для этой клавиш.
На пример выбрал клавишу F9.
Для этой клавиши выбираю из:  перевод в Gooole - translatePage() или перевод в Microsoft - translatePage1() или т.д.

Отсутствует

 

№705620-10-2013 22:27:29

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 3.6

Re: Custom Buttons

Andrey_Krropotkin пишет

okkamas_knife мне тоже понято что у меня не правильно, а как тогда правильно сделать?
Смысл такой я хочу определить клавиши для разных типов перевода:

И в чём проблема:

Выделить код

Код:

addEventListener('keydown', function(e) {
custombuttons.alertSlide("e.keyCode", e.keyCode);
}, false, window );

Добавлено 20-10-2013 22:28:50
События клавиатуры | Учебник JavaScript

Отредактировано bunda1 (20-10-2013 22:28:50)

Отсутствует

 

№705720-10-2013 23:03:55

Andrey_Krropotkin
Участник
 
Группа: Members
Зарегистрирован: 11-11-2011
Сообщений: 484
UA: Firefox 24.0

Re: Custom Buttons

bunda1 не понял.

Еще раз объясни.
Вот что у меня:
var Key = 120; // Клавища F9

addEventListener('keydown', function(e){
   if(!e.shiftKey && !e.ctrlKey && !e.altKey && e.keyCode == Key) translatePage();
}, false, window );

Я хочу чтобы вместо  translatePage() стояла переменная.
например
if(!e.shiftKey && !e.ctrlKey && !e.altKey && e.keyCode == Key3) trans;
где var trans = можно выбрать из translatePage() или translatePage1() или translatePage2() и т.д.
Но как это правильно сделать.

Отредактировано Andrey_Krropotkin (20-10-2013 23:04:37)

Отсутствует

 

№705820-10-2013 23:12:41

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 3.6

Re: Custom Buttons

Andrey_Krropotkin
Не понятно как выбрать.

Отредактировано bunda1 (20-10-2013 23:24:44)

Отсутствует

 

№705920-10-2013 23:20:03

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 24.0

Re: Custom Buttons

Andrey_Krropotkin

Выделить код

Код:

var trans = translatePage2;
var key = KeyEvent.DOM_VK_F9; // Клавиша F9

addEventListener('keydown', function(e){
   if(!e.shiftKey && !e.ctrlKey && !e.altKey && e.keyCode == key) trans();
}, false);

function translatePage() {
    alert("translatePage");
}
function translatePage2() {
    alert("translatePage2");
}
function translatePage3() {
    alert("translatePage3");
}

Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№706020-10-2013 23:35:37

Andrey_Krropotkin
Участник
 
Группа: Members
Зарегистрирован: 11-11-2011
Сообщений: 484
UA: Firefox 24.0

Re: Custom Buttons

Infocatcher спасибо работает.

Отсутствует

 

№706123-10-2013 20:11:47

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 3.6

Re: Custom Buttons

Вопрос к знающим людям, как лучше для производительности.
В коде который создаёт меню добавлять обработчик для запуска функций к каждому пункту меню или один обработчик для всего меню и получить функцию для запуска через e.target

Вот пример с одним обработчиком для всего меню:

Выделить код

Код:

// Добавляем подменю в контекстного меню на странице для выделенного текста ................................
(function () {
  var contextMenu = document.getElementById("contentAreaContextMenu");

  var menu = document.createElement("menu");     
  menu.setAttribute("label", "Find");
  contextMenu.insertBefore( menu, document.getElementById("context-sep-properties") );      
  addEventListener("popupshowing", function() {
     menu.hidden = !gContextMenu.isTextSelected; 
  }, false, contextMenu );
  addDestructor(function() { contextMenu.removeChild( menu ) });  
  
  
  var array = [
              { label:"Найти на странице", func: findToContex },
              { label:"Поиск по сайту(google)", func: searchToSite },
              { separator: '' },
              { label:"Выделить текст на странице", func: highlightSel },
              { label:"Автовыделение, добавить текст", func: addSel }
              ];
  
  var menuPopup = menu.appendChild( document.createElement("menupopup") );            
  array.forEach(function( m ) {
       if ( "separator" in m ) { menuPopup.appendChild( document.createElement("menuseparator") ); return };
       var mItem = document.createElement("menuitem");
       mItem.setAttribute("label", m.label );
       mItem.func = m.func;
       menuPopup.appendChild( mItem );
  });
  addEventListener("command", function(e) { e.target.func() }, false, menu );
  
  function findToContex() {
     alert("Найти на странице");
  };
         
  function searchToSite() {
     alert("Поиск по сайту(google)");
  };
        
  function highlightSel() {
     alert("Выделить текст на странице");
  };
        
  function addSel() {
     alert("Автовыделение, добавить текст");
  };             
})();

Отсутствует

 

№706223-10-2013 20:28:24

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 24.0

Re: Custom Buttons

bunda1 пишет

Вопрос к знающим людям, как лучше для производительности.
В коде который создаёт меню добавлять обработчик для запуска функций к каждому пункту меню или один обработчик для всего меню и получить функцию для запуска через e.target

Вряд ли в данном случае будет хоть сколько-нибудь заметная разница в производительности. :)
К тому же, особого смысла оптимизировать «действия по запросу» тоже обычно нету. Вот если что-то нужно выполнять часто, тогда да.
А так-то с одним обработчиком обычно удобнее. По скорости, видимо, сравнить не получится, а вот памяти, наверное, понадобится чуть меньше.


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№706323-10-2013 20:36:52

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 3.6

Re: Custom Buttons

Infocatcher
Понятно спасибо. Кстати если добавлять обработчик к каждому пункту меню alert(self._handlers.length); почему то показывает 0 обработчиков.

Отсутствует

 

№706423-10-2013 20:46:17

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 24.0

Re: Custom Buttons

bunda1
self._handlers – хранилище для добавленного через переопределенный addEventListener() (а не node.addEventListener()).


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№706523-10-2013 20:50:23

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 3.6

Re: Custom Buttons

Понятно.

Отсутствует

 

№706625-10-2013 18:47:03

Чайник
Участник
 
Группа: Members
Зарегистрирован: 15-04-2008
Сообщений: 268
UA: Firefox 22.0

Re: Custom Buttons

Почему я не могу получить этот элемент
c64fb7d7fcf04b0681e9fd9c65e18378.png

через его имя класса "search-go-container"? В консоли пишется "undefined"

Отсутствует

 

№706725-10-2013 19:25:02

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 24.0

Re: Custom Buttons

Чайник
https://developer.mozilla.org/en-US/doc … us_Content

Выделить код

Код:

document.getAnonymousElementByAttribute(document.getElementById("searchbar"), "anonid", "search-go-button");

Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№706825-10-2013 21:12:06

Чайник
Участник
 
Группа: Members
Зарегистрирован: 15-04-2008
Сообщений: 268
UA: Firefox 22.0

Re: Custom Buttons

Infocatcher
Написано там много и разобраться мне в этом затруднительно.

В двух словах: что надо подставлять в скобках?
Первым параметром родителя, правильно? А третьим параметром что - class? или anonid (если он есть)?

Отсутствует

 

№706925-10-2013 22:05:48

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 24.0

Re: Custom Buttons

Чайник пишет

Первым параметром родителя, правильно? А третьим параметром что - class? или anonid (если он есть)?

Это не совсем родитель, если уж на то пошло. Анонимные узлы в DOM Inspector'е подсвечены красным, а нужен ближайший не анонимный родитель. Атрибут может быль любой, просто принято использовать anonid.
https://developer.mozilla.org/en-US/doc … yAttribute

Parameters
    elt - The element to retrieve anonymous children for.
    attrName - The attribute name to look up.
    attrValue - The attribute value to match.


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№707026-10-2013 13:20:13

Чайник
Участник
 
Группа: Members
Зарегистрирован: 15-04-2008
Сообщений: 268
UA: Firefox 22.0

Re: Custom Buttons

Infocatcher
Разобрался :)
Спасибо большое!

Отсутствует

 

№707127-10-2013 10:56:11

villa7
Участник
 
Группа: Members
Зарегистрирован: 21-07-2012
Сообщений: 2235
UA: Firefox 25.0

Re: Custom Buttons

Как сделать чтобы кнопка открывала поиск стилей того сайта на котором находишься, а не просто сайт userstyles.org

скрытый текст

Выделить код

Код:

url=getBrowser().currentURI.spec;
domen = url.split(/\/+/g)[1];
getBrowser (). selectedTab = getBrowser (). addTab ("http://userstyles.org/styles/browse_r?search_terms=" + domen +"&submit=Search");


Лучше спросить у знающих - чем лезть не зная.

Отсутствует

 

№707227-10-2013 13:57:57

2k1dmg
Участник
 
Группа: Members
Зарегистрирован: 06-04-2011
Сообщений: 190
UA: Firefox 24.0

Re: Custom Buttons

villa7

скрытый текст

Выделить код

Код:

var domain = content.document.domain;
function userstylesOrgSearch() {
    if (/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/.test(domain))
        return;
    var domain_parts = domain.split('.');
    var hostName;
    switch(domain_parts.length) {
        case 2:
            hostName = domain_parts[0];
            break;
        case 3:
        case 4:
            hostName = domain_parts[1];
            break;
    }
    if (!hostName)
        return;
    var url = "http://userstyles.org/styles/browse/" + hostName;
    gBrowser.loadOneTab(url, {
        relatedToCurrent : true,
        inBackground : false
    });
}
if (domain)
    userstylesOrgSearch();

Отсутствует

 

№707327-10-2013 14:22:08

villa7
Участник
 
Группа: Members
Зарегистрирован: 21-07-2012
Сообщений: 2235
UA: Firefox 25.0

Re: Custom Buttons

2k1dmg
Ого, думал там попроще что то будет, а оно вона как, отлично, спасибо большое.


Лучше спросить у знающих - чем лезть не зная.

Отсутствует

 

№707427-10-2013 18:18:40

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2243
UA: Firefox 17.0

Re: Custom Buttons

2k1dmg пишет

скрытый текст

Выделить код

Код:

var domain = content.document.domain;
function userstylesOrgSearch() {
    if (/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/.test(domain))
        return;
    var domain_parts = domain.split('.');
    var hostName;
    switch(domain_parts.length) {
        case 2:
            hostName = domain_parts[0];
            break;
        case 3:
        case 4:
            hostName = domain_parts[1];
            break;
    }
    if (!hostName)
        return;
    var url = "http://userstyles.org/styles/browse/" + hostName;
    gBrowser.loadOneTab(url, {
        relatedToCurrent : true,
        inBackground : false
    });
}
if (domain)
    userstylesOrgSearch();

Ууу, дела контентские. Ничего в них не смыслю, но
http://uk.weather.yahoo.com/   -   «weather»
http://peverilpublishing.co.uk/   -   «co»

Если добавишь, в свой код, или в код типа этого,
фич из ихнего Advanced, то кнопка будет ещё более хороша.

скрытый текст

Выделить код

Код:

if (!content.document.domain) return;
const uri = gBrowser.currentURI, tld = Services.eTLD;
try { var str = tld.getBaseDomain(uri).replace("." + tld.getPublicSuffix(uri), "") } catch(ex) { return }
gBrowser.loadOneTab(
    "http://userstyles.org/styles/browse/" + str + "?per_page=50",
    { relatedToCurrent : true, inBackground : false }
);

Отсутствует

 

№707531-10-2013 21:09:19

rbfyec
Участник
 
Группа: Members
Зарегистрирован: 07-07-2012
Сообщений: 365
UA: Firefox 10.0

Re: Custom Buttons

Почему у меня на странице, открытой букмарклетом, выделение видно серым цветом?
А если страницу обновить, то выделяется уже синим.

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]