Всем привет, сразу скажу что не силен в дополнениях и в разработке в целом, но хочу переделать одно дополнение, так вот нужно выводить сообщения в строку состояния, как это можно реализовать? window.status не подходит.

Можно использовать

Выделить код

Код:

XULBrowserWindow.setOverLink("что-то там");

из chrome://browser/content/browser.js.

Так с ходу XULBrowserWindow.setOverLink("что-то там"); не заработало, может надо еще что-то подключать?

Откуда вызывается код?
XULBrowserWindow – свойство объекта window браузера.

вот в этом аддоне https://addons.mozilla.org/ru/firefox/addon/Y-Translate/
правлю этот файл resources/y-translate/data/inline02.js

А, это на Add-on SDK штука (и нужно изучать соответствующую документацию), там из этого скрипта надо сначала сообщение наверх отправить...
По аналогии с

Выделить код

Код:

self.port.emit('scoped', sentence, $('html').attr('lang'));

и

Выделить код

Код:

worker.port.on("scoped", function(sentence, lng){translate(worker, sentence, lng)});

в lib/main.js

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

Видимо, что-то вроде

Выделить код

Код:

self.port.emit("status", "Some text");

в inline02.js

И примерно такое

Выделить код

Код:

worker.port.on("status", function(msg) {
    var utils = require("sdk/window/utils");
    var active = utils.getMostRecentBrowserWindow();
    active.XULBrowserWindow.setOverLink(msg);
});

в lib/main.js.

Выделить код

Код:

function injected(worker)
    {
        // push parameters
      worker.port.emit("Prefs", prefHandle.Prefs());
      worker.port.emit("Urls", { ajax_loader: self.data.url("ajax-loader.gif") });
      prefs.setChanged(function(){ worker.port.emit("Prefs", prefHandle.Prefs())})

      worker.port.on("scoped", function(sentence, lng){translate(worker, sentence, lng)});
      worker.port.on("status", function(msg) {
        var utils = require("sdk/window/utils");
        var active = utils.getMostRecentBrowserWindow();
        active.XULBrowserWindow.setOverLink('test');
    });

      addWorker(worker);
      var isin = exclusionList.findHost(getHostName(worker.url));
      if(!isin)
        worker.port.emit("enable", {});
    }

сделал так, но результата почему то нет

Там вот такое выдает:

Module: y-translate/main has no authority to load: sdk/window/utils

Я добавил в harness-options.json

  "y-translate/main": {
   ...
   "requirements": {
    ...
    "sdk/widget": "sdk/widget",
    "sdk/window/utils": "sdk/window/utils"

   },

И потом в resources\y-translate\lib\main.js

      worker.port.on("scoped", function(sentence, lng){translate(worker, sentence, lng)});
      worker.port.on("status", function(msg) {
        var utils = require("sdk/window/utils");
        var active = utils.getMostRecentBrowserWindow();
        active.XULBrowserWindow.setOverLink(msg);
      });

И в resources\y-translate\data\inline02.js

    function translated(sentence, result, also1, also2)
    {
        mode.isTranslating = false;
        showLoader(false);
        showWithAll(sentence, result, also1, also2);
        self.port.emit("status", "Translated: " + result);

    }

Вроде, работает.

06-02-2014 21:13:35

Infocatcher пишет

выдает

Но почему-то только для

Выделить код

Код:

worker.port.on("status", function(msg) {
        try {
          var utils = require("sdk/window/utils");
          var active = utils.getMostRecentBrowserWindow();
          active.XULBrowserWindow.setOverLink(msg);
        }
        catch(e) {
          throw new Error("worker.port.on error: " + e);
        }
      });

Супер!

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

альфа: https://drive.google.com/file/d/0B7pYmUnFHoXpbGpnaThzSVJLZW8/edit?usp=sharing