Страницы: 1
Итак, вот кусок кода, который работает при загрузке страницы и вбивает в поля 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';"}); } });
Отредактировано Shutnik (06-03-2012 16:04:49)
Отсутствует
Я тоже с такой же проблемой столкнулся. Вся проблема в том 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 (30-10-2012 11:50:35)
pocherk<dote>biz
Отсутствует
уж не знаю что есть 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 лет бы не знал)
Отредактировано SunnyDay (15-11-2012 15:37:50)
Отсутствует
Страницы: 1