LINUX.ORG.RU

Дополнение к Firefox 30. Передача внешнему приложению.

 ,


0

1

сабж.
решил попробовать свои силы, и склепать одноклеточный плагин.
по хоткею чтоб передавал текущий вебпейдж моему скрипту, который /home/vasya_pupkin/script.sh webpage.html что то делает с ней
со всем разобрался окромя передачи веб-страницы скрипту
не могу найти в АПИ нифига, nsILocalFile из апи и метод launch не пашут, на офф сайте пишут что сей метод тока для венды.
Юзаю addons-sdk-1,16 с mdn

nsIProcess run() и в опциях передать location.href? Или надо передать именно контент, а не адрес, и изменить его?

liaonau ()

Pentadactyl/Vimperator не используешь? Там просто в .pentadactylrc можно такое:

javascript <<EOF
userContext.mpv_play_url = function() {
    let url  = content.document.location.href;
    let opts = ["--osd-level", "3", "--really-quiet", "--msg-level", "all=no", url];
    io.run('mpv', opts);
}
EOF
autocmd LocationChange '.*' :silent map q <Nop>
autocmd LocationChange '(youtube\.com|youtu\.be)' :silent map q :js userContext.mpv_play_url()<CR>

liaonau ()
Ответ на: комментарий от d2

у меня тоже, но как при помощи этих методов передать содержимое веб страницу внешнему приложению?

Zhopin ()
Ответ на: комментарий от Zhopin

Ну так ты же решил положить данные в файл, а потом запустить bash с параметрами (один из которых - путь к файлу). В чём конкретно сложность? Приводи кусок кода, попробую помочь.

d2 ()
Ответ на: комментарий от d2

Вот тебе ещё рабочий пример кода:

Components.utils.import("resource://gre/modules/FileUtils.jsm");
Components.utils.import("resource://gre/modules/NetUtil.jsm");

var data = "Hello, Zhopin!";

var file = FileUtils.getFile("TmpD", ["lor.tmp"]);
file.createUnique(Components.interfaces.nsIFile.NORMAL_FILE_TYPE, FileUtils.PERMS_FILE);

var ostream = FileUtils.openSafeFileOutputStream(file);

var converter = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"].
                createInstance(Components.interfaces.nsIScriptableUnicodeConverter);
converter.charset = "UTF-8";
var istream = converter.convertToInputStream(data);

NetUtil.asyncCopy(istream, ostream, function(status) {
  if (!Components.isSuccessCode(status)) {
    return;
  }
});

http://storage7.static.itmages.ru/i/14/0804/h_1407162156_2052671_5731cb2d14.png

d2 ()
Ответ на: комментарий от d2

с сохранение и работой чтение/запись/перемещение файлов проблем нет
проблема с запуском внешнего скрипта и передачи ему веб содержимого. Ну например в elinks это встроенная функция по Alt+I, хочу тоже самое реализовать в огнелисе.
Т.е. если нужен конкретный пример, то допустим по клавише сочетанию Alt+Shift+L содержимое вебпейджа передаётся

htmltolatex $1 > /home/vasya_pupkin/temp.tex

кода реализующего именно этот функционал запуска внешнего приложения попросту нет, так как не знаю куда смотреть(

Zhopin ()
Ответ на: комментарий от Zhopin

проблема с запуском внешнего скрипта и передачи ему веб содержимого

В первом же посте ответ - nsIProcess.

Пример:

var path = "/usr/bin/bash"
var args = ["-c", "echo 'Hello, Zhopin.' > /tmp/lor-test-again.txt"];

var file = Components.classes["@mozilla.org/file/local;1"]
                             .createInstance(Components.interfaces.nsIFile);
file.initWithPath(path);

var process = Components.classes["@mozilla.org/process/util;1"]
                                .createInstance(Components.interfaces.nsIProcess);

process.init(file);
process.run(true, args, args.length);

http://storage9.static.itmages.ru/i/14/0804/h_1407164977_8075664_99be9e0b29.png

Ну например в elinks это встроенная функция по Alt+I

Я пользуюсь/знаю elinks.

Давай от обратного. Как ты хочешь получить содержимое страницы в скрипте? Прочитав файл? Получив url и загрузив? Или как-либо иначе?

d2 ()
Ответ на: комментарий от d2

Я пользуюсь/знаю elinks.

Я не пользуюсь/знаю elinks.

// FIXED

d2 ()
Ответ на: комментарий от d2

на содержимое кода при cfx run выдало следующее

The following lines from file .../Docs/testfxplug/lib/main.js:
   9: var file = Components.classes["@mozilla.org/file/local;1"]
  10: .createInstance(Components.interfaces.nsIFile);
  13: var process = Components.classes["@mozilla.org/process/util;1"]
  14: .createInstance(Components.interfaces.nsIProcess);
  22: Components.utils.import("resource://gre/modules/FileUtils.jsm");
use 'Components' to access chrome authority. To do so, you need to add a
line somewhat like the following:

  const {Cc,Ci,Cu} = require("chrome");

Then you can use any shortcuts to its properties that you import from the
'chrome' module ('Cc', 'Ci', 'Cm', 'Cr', and 'Cu' for the 'classes',
'interfaces', 'manager', 'results', and 'utils' properties, respectively. And
`components` for `Components` object itself).

читаю это и не въезжаю
добавляю указанные константы, результат тот же

Zhopin ()
Ответ на: комментарий от Zhopin

УМВР. Нужно только поменять всё в соответствии с рекомендациями:

const {Cc,Ci,Cu} = require("chrome");

var path = "/usr/bin/bash"
var args = ["-c", "echo 'Hello, Zhopin.' > /tmp/lor-test-again.txt"];

var file = Cc["@mozilla.org/file/local;1"]
             .createInstance(Ci.nsIFile);
file.initWithPath(path);

var process = Cc["@mozilla.org/process/util;1"]
                .createInstance(Ci.nsIProcess);

process.init(file);
process.run(true, args, args.length);
d2 ()
Ответ на: комментарий от d2

видимо я просто победитель по жизни
спасибо, буду разбираться

Zhopin ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.