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

Многие проблемы быстрее решаются поиском по форуму и чтением FAQ, чем созданием новой темы и томительным ожиданием ответа.

№225113-12-2010 01:01:12

Osetr
Участник
 
Группа: Members
Зарегистрирован: 24-11-2010
Сообщений: 13
UA: Firefox 3.6

Re: Custom Buttons

В кнопке, которая нажимает произвольную ссылку, код:

Выделить код

Код:

function makeURL (url)
{
    var uri = makeURI (url);
    try
    {
        uri = uri. QueryInterface (Components. interfaces. nsIURL);
    }
    catch (e)
    {
        uri = null;
    }
    return uri;
}
var doc = gBrowser. contentDocument;
var cdurl = makeURL (doc. location. href);
cdurl. ref = "";
var links = doc. links;
var inlinks = [];
var curl;
for (var i = 0; i < links. length; i++)
{
    curl = makeURL (links [i]. href);
    if (curl && (curl. host == cdurl. host))
        inlinks. push (links [i]. href);
}
if (inlinks. length != 0)
{
    var ind = Math. floor (Math. random () * inlinks. length);
    loadURI (inlinks [ind]);
}

Она берет ссылку и вводит её как из закладки (без реферала), можно ли сделать так, чтобы текущую ссылку она использовала, как реферал к открываемой (ну как обычный переход по ссылке внутри сайта)

Отсутствует

 

№225213-12-2010 01:22:32

savpro
Участник
 
Группа: Members
Зарегистрирован: 06-12-2010
Сообщений: 8
UA: Firefox 3.6

Re: Custom Buttons

Anton
Огромное спасибо за ответ! вы мне очень помогли :)

А возможно без дополнительных плагинов сделать screenshot всей открытой странички?

Отредактировано savpro (13-12-2010 02:11:24)

Отсутствует

 

№225313-12-2010 20:10:18

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

Re: Custom Buttons

savpro пишет

А возможно без дополнительных плагинов сделать screenshot всей открытой странички?

SiteShoter v1.38 http://www.nirsoft.net/utils/web_site_screenshot.html + Кнопка запуска внешнего приложенияhttp://forum.mozilla-russia.org/viewtop … 68#p401368
может быть умные люди подскажут как запуститъ SiteShoter с передачей адреса страницы.

Отсутствует

 

№225414-12-2010 02:18:14

savpro
Участник
 
Группа: Members
Зарегистрирован: 06-12-2010
Сообщений: 8
UA: Firefox 3.6

Re: Custom Buttons

bunda1
нет, внешнее не выход

может быть умные люди подскажут как запуститъ SiteShoter с передачей адреса страницы.

тут args =getBrowser().contentDocument.location.href;
для  function startProcess(path, args) {

Внешнюю утилитку сохранения скрина сайта я и сам написал на C#, но я не знаю JavaScript, и тут мне нужна ваша помощь...
Я думаю задача выполнима,т.к. есть Screengrab который всяко-разно сохраняет страничку:)

Повторюсь, кто знает как сделать скрин открытой странички?

Отсутствует

 

№225514-12-2010 02:51:33

Крошка Ру
Участник
 
Группа: Extensions
Зарегистрирован: 19-10-2008
Сообщений: 8718
UA: Firefox 4.0

Re: Custom Buttons

...есть Screengrab который всяко-разно сохраняет страничку:)

savpro
Pearl Crescent Page Saver Basic на мой взгляд куда лучше :angel:

Отсутствует

 

№225614-12-2010 06:38:35

vv07
Участник
 
Группа: Members
Зарегистрирован: 07-11-2007
Сообщений: 689
UA: Foxware 0.0

Re: Custom Buttons

Мое почтение гуру кнопок :) Есть весьма полезное расширение BlockSite,но явно недоработанное.Ни в контексте,ни на панельках,нет кнопок добавления сайта в блокируемые.Реально ли сварганить такую кнопочку для BlockSite?
Или может посоветуете аналогичное расширение,кроме CensureBlock и Adblock

Отсутствует

 

№225714-12-2010 08:23:00

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

Re: Custom Buttons

savpro
на FF 3.5 работает(не всегда),нужно переделать для FF 3.6
// Capture Web Page

скрытый текст
/*Initialization Code*/

Выделить код

Код:

(function(){

    var captureMenu = document.createElement("menuitem");
    captureMenu.setAttribute("label","\Capture Web Page");
    captureMenu.addEventListener("command",function(){
        var win = window.content;
        var w = win.document.width;
        var h = win.document.height;
    
        var pos = document.getElementById('status-bar');
        var scrollbox = document.createElement('scrollbox');
        scrollbox.width = '1';
        scrollbox.height = '1';
        pos.appendChild(scrollbox);
    
        var canvas = win.document.createElement('canvas');
        canvas.style.display = 'inline';
        canvas.width = w;
        canvas.height = h;
        scrollbox.appendChild(canvas);
    
        var ctx = canvas.getContext("2d");
        ctx.clearRect(0, 0, canvas.width, canvas.height);
        ctx.save();
        ctx.scale(1.0, 1.0);
        ctx.drawWindow(win, 0, 0, w, h, "rgb(255,255,255)");
        ctx.restore();
    
        var url = canvas.toDataURL("image/png");
        const IO_SERVICE = Components.classes['@mozilla.org/network/io-service;1']
                   .getService(Components.interfaces.nsIIOService);
        url = IO_SERVICE.newURI(url, null, null);

        var fp = Components.classes['@mozilla.org/filepicker;1']
                  .createInstance(Components.interfaces.nsIFilePicker);
        fp.init(window, "Save Screenshot As", fp.modeSave);
        fp.appendFilters(fp.filterImages);
        fp.defaultExtension = "png";
        fp.defaultString = win.document.title + ".png";
        if ( fp.show() == fp.returnCancel || !fp.file ) return;

        var wbp = Components.classes['@mozilla.org/embedding/browser/nsWebBrowserPersist;1']
              .createInstance(Components.interfaces.nsIWebBrowserPersist);
        wbp.saveURI(url, null, null, null, null, fp.file);

        pos.removeChild(scrollbox);
    },false);

    document.getElementById("menu_ToolsPopup").insertBefore(
        captureMenu,
        document.getElementById("sanitizeSeparator"));
})();

Отсутствует

 

№225815-12-2010 01:08:05

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 3.6
Веб-сайт

Re: Custom Buttons

Quality пишет

Да вроде работал в опере...

А в Firefox+GreaseMonkey ?

Добавлено 15-12-2010 01:10:31

Osetr пишет

Она берет ссылку и вводит её как из закладки (без реферала), можно ли сделать так, чтобы текущую ссылку она использовала, как реферал к открываемой (ну как обычный переход по ссылке внутри сайта)

referrer - второй аргумент в loadURI, видимо как-то так:

Выделить код

Код:

…
loadURI (inlinks [ind], gBrowser. contentDocument. location. href);
…

Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№225915-12-2010 05:06:56

savpro
Участник
 
Группа: Members
Зарегистрирован: 06-12-2010
Сообщений: 8
UA: Firefox 3.6

Re: Custom Buttons

bunda1 пишет

savpro
на FF 3.5 работает(не всегда),нужно переделать для FF 3.6
// Capture Web Page

скрытый текст
/*Initialization Code*/

Выделить код

Код:

(function(){

    var captureMenu = document.createElement("menuitem");
    captureMenu.setAttribute("label","\Capture Web Page");
    captureMenu.addEventListener("command",function(){
        var win = window.content;
        var w = win.document.width;
        var h = win.document.height;
    
        var pos = document.getElementById('status-bar');
        var scrollbox = document.createElement('scrollbox');
        scrollbox.width = '1';
        scrollbox.height = '1';
        pos.appendChild(scrollbox);
    
        var canvas = win.document.createElement('canvas');
        canvas.style.display = 'inline';
        canvas.width = w;
        canvas.height = h;
        scrollbox.appendChild(canvas);
    
        var ctx = canvas.getContext("2d");
        ctx.clearRect(0, 0, canvas.width, canvas.height);
        ctx.save();
        ctx.scale(1.0, 1.0);
        ctx.drawWindow(win, 0, 0, w, h, "rgb(255,255,255)");
        ctx.restore();
    
        var url = canvas.toDataURL("image/png");
        const IO_SERVICE = Components.classes['@mozilla.org/network/io-service;1']
                   .getService(Components.interfaces.nsIIOService);
        url = IO_SERVICE.newURI(url, null, null);

        var fp = Components.classes['@mozilla.org/filepicker;1']
                  .createInstance(Components.interfaces.nsIFilePicker);
        fp.init(window, "Save Screenshot As", fp.modeSave);
        fp.appendFilters(fp.filterImages);
        fp.defaultExtension = "png";
        fp.defaultString = win.document.title + ".png";
        if ( fp.show() == fp.returnCancel || !fp.file ) return;

        var wbp = Components.classes['@mozilla.org/embedding/browser/nsWebBrowserPersist;1']
              .createInstance(Components.interfaces.nsIWebBrowserPersist);
        wbp.saveURI(url, null, null, null, null, fp.file);

        pos.removeChild(scrollbox);
    },false);

    document.getElementById("menu_ToolsPopup").insertBefore(
        captureMenu,
        document.getElementById("sanitizeSeparator"));
})();

во, отлично, немного поковырял этот код и получилось сделать скрин как мне и нужно, спасибо! +1 ))

Крошка Ру пишет

...есть Screengrab который всяко-разно сохраняет страничку:)

savpro
Pearl Crescent Page Saver Basic на мой взгляд куда лучше :angel:

Ага, отличное дополнение) Но мне нужен был голый код,т.к. пишу плагин на WPF, небольшое приложение работающее в FireFox, и решил некоторую функциональность сбросить на кнопку, а JavaScript некогда изучать, но спасибо добрым энтузиастам, помогают :)

Отредактировано savpro (15-12-2010 05:17:51)

Отсутствует

 

№226015-12-2010 09:44:14

Igor22ru
Участник
 
Группа: Members
Зарегистрирован: 30-11-2010
Сообщений: 15
UA: Opera 10.6

Re: Custom Buttons

Друзья! Товарищи!

а подскажите код кнопки, для того что бы не спрашивал мозила закрывать страницу или нет.

вот как на этом сайте
http://flash-rush.ru/bestgames_tsno.html?tid=999177913

скрин
http://s003.radikal.ru/i201/1012/47/fa900f836779.jpg

Отредактировано Igor22ru (15-12-2010 09:45:32)

Отсутствует

 

№226115-12-2010 10:55:04

vv07
Участник
 
Группа: Members
Зарегистрирован: 07-11-2007
Сообщений: 689
UA: Foxware 0.0

Re: Custom Buttons

Anton
Может рискнете с моей просьбой разобраться?

Отсутствует

 

№226215-12-2010 16:08:28

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 3.6
Веб-сайт

Re: Custom Buttons

vv07
Если мне память не изменяет, нужный код уже есть где-то в этой теме. Но форум работает с перебоями, "Версия для печати" у меня не открывается.


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№226315-12-2010 18:26:45

Osetr
Участник
 
Группа: Members
Зарегистрирован: 24-11-2010
Сообщений: 13
UA: Firefox 3.6

Re: Custom Buttons

Anton пишет

видимо как-то так:Код:…
loadURI (inlinks [ind], gBrowser. contentDocument. location. href);

Кнопка перестала работать... :rolleyes:

Отсутствует

 

№226415-12-2010 18:42:46

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 3.6
Веб-сайт

Re: Custom Buttons

Osetr пишет

Кнопка перестала работать...

Тогда так:

Выделить код

Код:

…
loadURI (inlinks [ind], makeURL (gBrowser. contentDocument. location. href));
…

Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№226516-12-2010 10:09:44

vv07
Участник
 
Группа: Members
Зарегистрирован: 07-11-2007
Сообщений: 689
UA: Foxware 0.0

Re: Custom Buttons

Anton
У меня таже история,но может хотя бы название кнопки вспомните,или когда форум перестанет глчить,найдете? А тосами понимаете,листать 100 стр.проблематично блин.

Отсутствует

 

№226616-12-2010 12:18:20

3Jlou
Участник
 
Группа: Members
Зарегистрирован: 14-08-2008
Сообщений: 211
UA: Firefox 3.5

Re: Custom Buttons

Есть совсем небольшое, но достаточно удобное дополнение для скриншотов страниц: Abduction!,
может из его кода как то наковырять кнопку можно? :)

Отсутствует

 

№226716-12-2010 12:51:38

vv07
Участник
 
Группа: Members
Зарегистрирован: 07-11-2007
Сообщений: 689
UA: Foxware 0.0

Re: Custom Buttons

Anton
Все что нашел,увы не работает.Может надешь время подшаманить?

Отсутствует

 

№226816-12-2010 14:03:00

Chis
Участник
 
Группа: Members
Зарегистрирован: 12-03-2009
Сообщений: 55
UA: Firefox 3.6

Re: Custom Buttons

Нужна кнопка- "Очистить кэш"...
Может, у кого завалялась?

Отсутствует

 

№226916-12-2010 16:12:47

iDev.Pi
баг-репортёр
 
Группа: Extensions
Зарегистрирован: 31-01-2010
Сообщений: 2718
UA: Firefox 4.0

Re: Custom Buttons

Chis
в код

скрытый текст
/*
chrome://browser/content/preferences/advanced.js:

var cacheService = Components.classes["@mozilla.org/network/cache-service;1"]
                                .getService(Components.interfaces.nsICacheService);
try {
  cacheService.evictEntries(Components.interfaces.nsICache.STORE_ANYWHERE);
} catch(ex) {
*/
var cacheSvc = Components.classes["@mozilla.org/network/cache-service;1"]
    .getService(Components.interfaces.nsICacheService);
const cache = Components.interfaces.nsICache;
try {
    cacheSvc.evictEntries(cache.STORE_ON_DISK);
    cacheSvc.evictEntries(cache.STORE_IN_MEMORY);
}
catch(e) {
}


mzfx

Отсутствует

 

№227016-12-2010 16:51:33

Chis
Участник
 
Группа: Members
Зарегистрирован: 12-03-2009
Сообщений: 55
UA: Firefox 3.6

Re: Custom Buttons

iDev.Pi
Спасибо!!! А, как проверить, работает или нет?

Отсутствует

 

№227116-12-2010 20:24:39

Igor22ru
Участник
 
Группа: Members
Зарегистрирован: 30-11-2010
Сообщений: 15
UA: Opera 10.6

Re: Custom Buttons

Igor22ru пишет

Друзья! Товарищи!а подскажите код кнопки, для того что бы не спрашивал мозила закрывать страницу или нет.вот как на этом сайте http://flash-rush.ru/bestgames_tsno.html?tid=999177913скринhttp://s003.radikal.ru/i201/1012/47/fa900f836779.jpg
                    Отредактировано Igor22ru (Вчера 12:45:32)

а вот этому человеку может ктонибудь поможет?

а есть такое дополнение что бы можно было по шаблону грузить изображение? или по размеру?

Отсутствует

 

№227217-12-2010 13:14:15

Osetr
Участник
 
Группа: Members
Зарегистрирован: 24-11-2010
Сообщений: 13
UA: Firefox 3.6

Re: Custom Buttons

Антон, все заработало, спасибо!
Вопрос оффтоп..
Каким образом получает случайное число функция Math. random ()? На чем она основана?)

Отсутствует

 

№227317-12-2010 15:30:48

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 3.6
Веб-сайт

Re: Custom Buttons

vv07 пишет

Anton
Все что нашел,увы не работает.Может надешь время подшаманить?

Что подшаманить ?

→ Поиск по теме → Block Site → раз, два, оба варианта работают.


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№227429-12-2010 20:14:28

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

Re: Custom Buttons

Anton
Прашу а помощи.
Вот /*Initialization Code*/ котрое дает возможность выделить все на странице или в текстовом поле двойным кликом левой клавишей мыши. Пажалуйста дай код каторое атключает етот код //dblclick Select All... на страныцах с адресамы
http://www.translit.ru/keyboard/
chrome://browser/content/bookmarks/bookmarksPanel.xul
chrome://browser/content/places/places.xul


//dblclick Select All........................................

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

Выделить код

Код:

/*Initialization Code*/
gBrowser.addEventListener("dblclick", function(event) {
    if (event.button != 0) {
        return;
    }
    
    event.preventDefault();
    document.getElementById("contentAreaContextMenu").hidePopup();
    document.getElementById("cmd_selectAll").doCommand();
}, false);

Вот /*Initialization Code*/ котрое дает возможность удерживая левую кнопку мыши, движением мыши вверх-вниз открыть ссылку в новой активной или фоновой вкладке или выделенную фразу отправить в поисковик(аналог расширению Easy DragToGo). Пажалуйста дай код каторое атключает етот код //Drag To Go.. на страныцах с адресамы
chrome://browser/content/bookmarks/bookmarksPanel.xul
chrome://browser/content/places/places.xul


//Drag To Go...........................................       

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

Выделить код

Код:

/*Initialization Code*/
var easyDragToGo = {

  loaded: false,
  moving: false,
  StartAlready: false,
  onStartEvent: null,       // drag start event
  onDropEvent: null,        // drag drop event
  aXferData: null,          // drag data
  aDragSession: null,       // drag session

  onLoad: function() {
    if (!easyDragToGo.loaded) {
      var contentArea = getBrowser().mPanelContainer;
      if (contentArea) {
        eval("nsDragAndDrop.checkCanDrop =" + nsDragAndDrop.checkCanDrop.toString().replace(
          'if ("canDrop" in aDragDropObserver)',
          'if (easyDragToGo.StartAlready) this.mDragSession.canDrop = true; $&')
        );
        contentArea.addEventListener('draggesture', function(e) {easyDragToGo.dragStart(e)}, true);
        contentArea.addEventListener('dragover', function(e) {
            nsDragAndDrop.dragOver(e, easyDragToGoDNDObserver);
          }, false);
        contentArea.addEventListener('dragdrop', function(e) {
            nsDragAndDrop.drop(e, easyDragToGoDNDObserver);
          }, false);
        contentArea.addEventListener('drop', function(e) {
            nsDragAndDrop.drop(e, easyDragToGoDNDObserver);
          }, false);
      }
      easyDragToGo.loaded = true;
    }
  },

  dragStart: function(aEvent) {
    this.onStartEvent = aEvent;
    this.StartAlready = true;
  },

  clean: function() {
    this.StartAlready = false;
    if (this.onDropEvent) {
      this.onDropEvent.preventDefault();
      this.onDropEvent.stopPropagation();
    }
    this.onStartEvent = this.onDropEvent = this.aXferData = this.aDragSession = null;
  },

  openURL: function(aURI, src, target, X, Y) {
    if (!aURI) return;

    var act = "";
    var browser = getTopWin().getBrowser();
    var uri = "";
    var bg = true;
    var postData = {};

    act = Y<0 ? "link-fg" : "link-bg";
    // get search strings
    if ((target == "text" || target == "fromContentOuter.text")) {
      var submission = this.getSearchSubmission(aURI, act);
      if (submission) {
        uri = submission.uri.spec;
        postData.value = submission.postData;
        if (uri)
          act = act.replace("link", "search");
        else
          act = "";
      }
      else
        act = "";
      if (!act) alert("No Search Engines!");
    }

    switch (act) {
      case "search-fg":
      case "link-fg":
        // open a new tab and selected it
        bg = false;
      case "search-bg":
      case "link-bg":
        if (!uri) uri = getShortcutOrURI(aURI, postData);
        try {
          var cur = (!bg || browser.mTabs.length == 1) &&
                browser.webNavigation.currentURI.spec == "about:blank" &&
                !browser.mCurrentBrowser.webProgress.isLoadingDocument ||
                (/^(javascript|mailto):/i.test(uri));
        } catch(e) {}
        if (cur)
          // open in current tab
          loadURI(uri, null, postData.value, true);
        else {
          // for Tree Style Tab extension
          if ("TreeStyleTabService" in window && (target == "link" && !this.aDragSession.sourceNode.localName || target == "img"))
            try {TreeStyleTabService.readyToOpenChildTab(gBrowser.selectedTab);} catch(e) {}

          // open a new tab
          browser.loadOneTab(uri, null, null, postData.value, bg, true);
        }
        break;
      default:
        break;
    }
  },

  customCode: function(code, url, src, target, X, Y) {
    eval(code);
  },

  getSearchSubmission: function(searchStr, action) {
    try {
      var ss = Components.classes["@mozilla.org/browser/search-service;1"]
                .getService(Components.interfaces.nsIBrowserSearchService);
      var engine, engineName;
      if ( /^search-(.+?)-?(fg|bg|cur)$/.test(action) )
        engineName = RegExp.$1;
      else
        engineName = "c";

      if ( engineName == "c" )
        engine = ss.currentEngine || ss.defaultEngine;
      else if ( engineName == "d" )
        engine = ss.defaultEngine || ss.currentEngine;
      else {
        engine = ss.getEngineByName(engineName);
        if (!engine) engine = ss.currentEngine || ss.defaultEngine;
      }
      return engine.getSubmission(searchStr, null);
    }
    catch (e) {
      return null;
    }
  },

  SelectedText: function(node) {
    if (!node) return "";
    if ( node.localName == "TEXTAREA" || (node.localName == "INPUT" && node.type == "text") )
      return node.value.substring(node.selectionStart, node.selectionEnd);
    else
      return document.commandDispatcher.focusedWindow.getSelection().toString();
  },

  seemAsURL: function(url) {
      // url test
      var DomainName = /(\w+(\-+\w+)*\.)+\w{2,7}/;
      var HasSpace = /\S\s+\S/;
      var KnowNameOrSlash = /^(www|bbs|forum|blog)|\//;
      var KnowTopDomain1 = /\.(com|net|org|gov|edu|info|mobi|mil|asia)$/;
      var KnowTopDomain2 = /\.(de|uk|eu|nl|it|cn|be|us|br|jp|ch|fr|at|se|es|cz|pt|ca|ru|hk|tw|pl)$/;
      var IsIpAddress = /^([1-2]?\d?\d\.){3}[1-2]?\d?\d/;
      return !HasSpace.test(url) && DomainName.test(url) && (KnowNameOrSlash.
          test(url) || KnowTopDomain1.test(url) || KnowTopDomain2.test(url) ||
          IsIpAddress.test(url));
  },

  getForceURL: function(url) {
    var code;
    var str = "";
    url = url.replace(/\s|\r|\n|\u3000/g, "");
    for (var i = 0; i < url.length; i++) {
      code = url.charCodeAt(i);
      if (code >= 65281 && code <= 65373)
        str += String.fromCharCode(code - 65248);
      else
        str += url.charAt(i);
    }
    str = this.fixupSchemer(str);
    str = this.SecurityCheckURL(str);
    return str;
  },

  SecurityCheckURL: function(aURI) {
    if ( /^data:/.test(aURI) ) return "";
    if ( /^javascript:/.test(aURI) || /^about:/.test(aURI)) return aURI;
    var sourceURL = getBrowser().currentURI.spec;
    const nsIScriptSecurityManager = Components.interfaces.nsIScriptSecurityManager;
    var secMan = Components.classes["@mozilla.org/scriptsecuritymanager;1"]
                  .getService(nsIScriptSecurityManager);
    const nsIScriptSecMan = Components.interfaces.nsIScriptSecurityManager;
    try {
      secMan.checkLoadURIStr(sourceURL, aURI, nsIScriptSecMan.STANDARD);
    } catch(e) {
      aURI = "";
    }
    return aURI;
  },

  fixupSchemer: function(aURI) {
    if ( /^(?::\/\/|\/\/|\/)?(([1-2]?\d?\d\.){3}[1-2]?\d?\d(\/.*)?|[a-z]+[\-\w]+\.[\-\w\.]+(\/.*)?)$/i.test(aURI) )
      aURI = "http://" + RegExp.$1;
    else if ( /^\w+[\-\.\w]*@(\w+(\-+\w+)*\.)+\w{2,7}$/.test(aURI) )
      aURI = "mailto:" + aURI;
    else {
      var table = "ttp=>http,tp=>http,p=>http,ttps=>https,tps=>https,ps=>https,s=>https";
      var regexp = new RegExp();
      if (aURI.match(regexp.compile('^('+ table.replace(/=>[^,]+|=>[^,]+$/g, '').replace(/\s*,\s*/g, '|')+'):', 'g'))) {
        var target = RegExp.$1;
        table.match(regexp.compile('(,|^)'+target+'=>([^,]+)'));
        aURI = aURI.replace(target, RegExp.$2);
      }
    }
    return aURI;
  }
};

var easyDragToGoDNDObserver = {

  onDragOver: function(aEvent, aFlavour, aDragSession) {
    aDragSession.canDrop = true;
    // for drag tabs or bookmarks
    if (!easyDragToGo.StartAlready) {
      easyDragToGo.onStartEvent = aEvent;
      easyDragToGo.StartAlready = true;
    }
  },

  onDrop: function(aEvent, aXferData, aDragSession) {
    if (!easyDragToGo.StartAlready) return;
    easyDragToGo.onDropEvent = aEvent;
    easyDragToGo.aXferData = aXferData;
    easyDragToGo.aDragSession = aDragSession;

    var sNode = aDragSession.sourceNode;
    var url;
    if ( !sNode ) {
      // Drag and Drop from content outer
      try {url = aXferData.data.replace( /^[\s\n]+|[\s\n]+$/g, '' )} catch(e) {}
      if (!url) {
        easyDragToGo.clean();
        return;
      }
      var target = "fromContentOuter.text";
      if ( easyDragToGo.seemAsURL(url) || (/^file:\/\/\/[\S]+$/.test(url)) ) {
        //force it to a url or local file/directory
        if ( /^file:\/\/\//.test(url)) {
          if ( /([^\/]+\.(xpi|jar))$/.test(url) ) {
            eval("InstallTrigger.install({ '" + RegExp.$1 + "' : url })");
            easyDragToGo.clean();
            return;
          }
          else
            target = "fromContentOuter.link";
        }
        else {
          var tmpurl = url;
          url = easyDragToGo.fixupSchemer(url);
          url = easyDragToGo.SecurityCheckURL(url);
          if (url)
            target = "fromContentOuter.link";
          else
            url = tmpurl;
        }
      }
      easyDragToGo.openURL(url, null, target);
    }
    else {
      // Drag and Drop from Content area
      var relX = aEvent.screenX - easyDragToGo.onStartEvent.screenX;
      var relY = aEvent.screenY - easyDragToGo.onStartEvent.screenY;
      // do nothing with drag distance less than 10px
      if ( Math.abs(relX) < 10 && Math.abs(relY) < 10 ) {
        easyDragToGo.clean();
        return;
      }

      var str, src;
      var selectStr =  "";
      var type = "STRING";
      var target = "link";

      url = str = aXferData.data.replace( /\r\n/g, "\n").replace( /\r/g, "\n");

      try {
        selectStr = easyDragToGo.SelectedText(easyDragToGo.onStartEvent.target);
        selectStr = selectStr.replace( /\r\n/g, "\n").replace( /\r/g, "\n");
      } catch(e) {}

      if (str != selectStr) {
        var idx = str.indexOf("\n");
        if (idx > 0) {
          url = str.substr(0, idx);
          str = str.substr(idx + 1);
        }
        if (str == selectStr)
          url = str;
        else if ( !(/\s|\n/.test(url)) && (/^([a-z]{2,7}:\/\/|mailto:|about:|javascript:)/i.test(url)) )
          type = "URL";
        else
          url = selectStr;
      }
      else if (!(/\s|\n/.test(url)) && (/^([a-z]{2,7}:\/\/|mailto:|about:|javascript:)/i.test(url)))
        type = "URL";

      url = url.replace( /^[\s\n]+|[\s\n]+$/g, '' );

      if ( url && type == "URL" ) {
        src = url = easyDragToGo.SecurityCheckURL(url);

        if (sNode.nodeName == "IMG" || sNode.nodeName == "A" && !sNode.textContent && sNode.firstElementChild instanceof HTMLImageElement) {
          try {src = sNode.src || sNode.firstElementChild.src;} catch(e) {}
          target = "img";
        }
        else if (aEvent.ctrlKey) {
          // as text with ctrlkey
          var aNode = easyDragToGo.onStartEvent.target;
          while (aNode && aNode.nodeName != "A") aNode = aNode.parentNode;
          if (aNode && aNode.textContent) {
            url = aNode.textContent;
            target = "text";
          }
        }
      }
      else if (url) {
        var tmpurl = url;
        if (aEvent.ctrlKey) {
          url = easyDragToGo.getForceURL(url)    // force convert to a url
          if (url)
            target = "link";
          else
            url = tmpurl;
        }
        else if ( easyDragToGo.seemAsURL(url) ) { //seem as a url
          url = easyDragToGo.fixupSchemer(url);
          url = easyDragToGo.SecurityCheckURL(url);
          if (!url) { // not a url, search it
            url = tmpurl;
            target = "text";
          }
        }
        else  //it's a text string, so search it
          target = "text";
      }

      easyDragToGo.openURL(url, src, target, relX, relY);
    }

    easyDragToGo.clean();
  },

  getSupportedFlavours: function() {
    var flavourSet = new FlavourSet();
    flavourSet.appendFlavour("text/x-moz-url");
    flavourSet.appendFlavour("text/unicode");
    return flavourSet;
  }
};
easyDragToGo.onLoad();

Отредактировано bunda1 (29-12-2010 20:17:47)

Отсутствует

 

№227529-12-2010 20:41:31

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

Re: Custom Buttons

dblclick Select All

var disabled = [
    "http://www.translit.ru/keyboard/",
    "chrome://browser/content/bookmarks/bookmarksPanel.xul",
    "chrome://browser/content/places/places.xul"
];

gBrowser.addEventListener("dblclick", function(event) {
    if (event.button != 0) {
        return;
    }
    if (disabled.indexOf(content.location.href) != -1)
        return;

    ...

Drag To Go

Наверное, так:

var disabled = [
    "chrome://browser/content/bookmarks/bookmarksPanel.xul",
    "chrome://browser/content/places/places.xul"
];

...
  onDrop: function(aEvent, aXferData, aDragSession) {
    if (disabled.indexOf(content.location.href) != -1)
      return;

    if (!easyDragToGo.StartAlready) return;
    ....


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

Отсутствует

 

Board footer

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