Итак, вот кусок кода, который работает при загрузке страницы и вбивает в поля LOGIN и PASSWORD

Выделить код

Код:

var data = require("self").data;
var pageMod = require("page-mod");
pageMod.PageMod({
  include: "http://www.mail.ru/",
  contentScriptWhen: 'end',
  contentScript: "document.getElementById('mailbox__login').value = 'LOGIN';"
  +"document.getElementById('mailbox__password').value = 'PASSWORD';"});

НО, как только я хочу забиндить это все на виджет, происходит нечто неведомое. Вся эта структура просто перестает работать. Что делать? помогите?
Код прилагаю, писал двумя способами.

Выделить код

Код:

var widgets = require("widget");
 
// A basic click-able image widget.
widgets.Widget({
  id: "google-link",
  label: "Widget with an image and a click handler",
  contentURL: "http://www.google.com/favicon.ico",
  onClick: function() {
    document.getElementById('mailbox__login').value = 'LOGIN';
  }
});

widgets.Widget({
  id: "mouseover-effect",
  label: "Widget with changing image on mouseover",
  contentURL: "http://www.yahoo.com/favicon.ico",
  onClick: function() {
    pageMod.PageMod({
  include: "http://www.mail.ru/",
  contentScriptWhen: 'end',
  contentScript: "document.getElementById('mailbox__login').value = 'LOGIN';"
  +"document.getElementById('mailbox__password').value = 'PASSWORD';"});
  }
});

Я тоже с такой же проблемой столкнулся. Вся проблема в том contentScript: не видит вообще глобальные переменные. Там скрипт пишется вообще не зависимы й . Если не веришь попробуй такой пример :

Выделить код

Код:

var pageMod = require("page-mod");
pageMod.PageMod({
  include: "*.org",
  contentScript: 'window.alert("Page matches ruleset");'
});

При открытии любой странички с доменом org работает.
А теперь немного изменим код

Выделить код

Код:

var pageMod = require("page-mod");
test = "Page matches ruleset";
pageMod.PageMod({
  include: "*.org",
  contentScript: 'window.alert(test);'
});

И никак ты туда переменную test не поставишь )

а вот такой код будет естественно работать

Выделить код

Код:

var pageMod = require("page-mod");
pageMod.PageMod({
  include: "*.org",
  contentScript: 'test = "Page matches ruleset";'+
'window.alert(test);'
});

вот и думай хоть весь скрипт что вверху написан пиши в contentScript но это не логично. Логичнее было бы через contentScriptFile но тут мне не все понятно . документация тут https://addons.mozilla.org/en-US/develo … e-mod.html

l2cri, спасибо, а то я уже весь мозг сломал :usch: не мог понять в чем проблема, буду разбираться.

Ага ;) и мне подскажешь если решишь ? хорошо !

уж не знаю что есть require("widget") и require("page-mod") но предполагаю, что у объекта, который ты называешь "виджет" есть собственный документ, и при инъекции document.getElementById он ищет именно в этом документе.
Тем более если работает конструкция (а также если запощеный тобой JS-код внутри расширения):

Выделить код

Код:

test = "Page matches ruleset";
pageMod.PageMod({
  include: "*.org",
  contentScript: 'window.alert(test);'
});

это означает только одно - что документ для этого "виджета" является корневым документом браузера Firefox - естественно скрипт там не найдёт поля логина и пароля.

Если я неправ - обобщи проблемму, напиши хотябы где и как выполняются скрипты которые ты запостил, я вот например не знаю что за класс "page-mod" , "widget", и функция require , и 100 лет бы не знал)