Firefox - Перехват / изменение данных поста, когда какая-то переменная соответствует некоторому шаблону

Я хотел бы знать, возможно ли перехватить и изменить данные поста, когда URL-адрес и некоторые переменные соответствуют некоторому шаблону.

например:

пусть URL для входа будет: http://www.someonlineprofiles.com/

пусть данные поста будут:

email: "myemail@gmail.com"
pass: "mypass"
theme: "skyblue"

Я хотел бы этого, если:

url знак равно "http://www.someonlineprofiles.com/ajax/login_action_url" а также

email знак равно "myemail@gmail.com"

затем theme Значение будет безоговорочно изменено на: "hotdesert"

Можно ли для этого создать надстройку Firefox? Достаточно ли надстройки для этого?

Я нашел эту ссылку: изменить почтовые данные запроса в расширении Firefox

Заранее спасибо!

[ДОБАВЛЕННАЯ ИНФОРМАЦИЯ]

Я не знаю, интересно ли узнать версию моего Firefox: 35.0.1

1 ответ

Решение

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

Наблюдатели

Прежде всего, надстройки могут наблюдать и манипулировать запросами HTTP(S) до того, как браузер отправит запрос, вам просто нужно реализовать и зарегистрировать то, что называется обозревателем http.

const {classes: Cc, instances: Ci, utils: Cu} = Components;
Cu.import("resource://gre/modules/Services.jsm"); // for Services

var httpRequestObserver = {
  observe: function(channel, topic, data) {
    if (topic != "http-on-modify-request") {
      return;
    }
    if (!(channel instanceof Ci.nsIHttpChannel)) {
      return; // Not actually a http channel
    }
    // See nsIChannel, nsIHttpChannel and nsIURI/nsIURL
    if (channel.URI.host != "www.someonlineprofiles.com") {
      return;
    }
    doSomething(channel);
  },

  register: function() {
    Services.obs.addObserver(this, "http-on-modify-request", false);
  },

  unregister: function() {
    Services.obs.removeObserver(this, "http-on-modify-request");
  }
};

httpObserver.register();
// When your add-on is shut down, don't forget to call httpObserver.unregister();

Регистрируйте http-наблюдателя только один раз в своем дополнении:

  • Если вы используете SDK, поместите его в main.js или выделенный модуль. Вам также нужно будет немного переписать код и заменить const .. = Components линия с require("chrome"),
  • Если вы пишете надстройку наложения XUL, поместите ее в модуль кода.

Перезапись почтовых данных

Нам все еще нужно реализовать doSomething() и на самом деле переписать данные поста. Канал http обычно реализует nsIUploadStream интерфейс, а поток загрузки - это то, где находятся данные текущей записи, если таковые имеются. Он также имеет setUploadStream() метод, который вы можете использовать, чтобы полностью заменить поток загрузки.

function doSomething(channel) {
  if (!(channel instanceof Ci.nsIUploadStream)) {
    return;
  }
  // construct new post data
   channel.setUploadStream(newStream);
}

Создание новых почтовых данных будет зависеть от ваших реальных требований. Я привел рабочий пример в другом ответе о том, как вы можете это сделать.

Если вам нужно извлечь некоторые данные из старого потока загрузки, вам нужно будет декодировать существующий channel.uploadStream как multipart/form-data сам. Я предлагаю вам проверить TamperData и подобные дополнения о том, как они там работают.

Другие вопросы по тегам