Полезная информация

Список ответов на каверзные вопросы можно получить в FAQ-разделе форума.

Разработка » Firefox 23 - тормозит JavaScript в расширении » 22-08-2013 12:09:48

Дело в том что у меня платное расширение, в котором на JavaScript работает тяжёлый алгоритм сегментоидного распознавание изображений. До 23го фаерфокса от 3 до 22, работа алгоритма занимала 5 секунд, 23-й фаерфокс 15 секунд. Могу предположить, что падение производительности общее, ибо все скрипты стали работать медленнее, по крайней мере в расширениях точно. Клиенты уже поголовно переставили 22й фокс, но это не дело, согласитесь)

Вопросы:

1. У кого были аналогичные тормоза, кто тестил, не нашли ли более конкретную проблему, чем просто "тормозит"?
2. В 23м фаерфоксе не ввели ли дополнительные мониторы/проверки/настроки безопасности, связанные с JavaScript? Если ввели, подскажите, как их отключить?
3. Кто листал английское комьюнити, возможно там описывали это в виде бага?

Разработка » Перестал работать скрипт в версии 23.0.1 » 22-08-2013 11:59:23

Использование функционала вроде setAttribute, document.cookie= , .innerHTML= вообще нежелательно (особенно в коде страницы а не расширения) и при них не гарантируется браузеро-независимость. Лучше jQuery. А если хочешь отладить баг используй расширение firebug, или на худой конец:

Выделить код

Код:

function remove(rid){
   try{
      .....
   }catch(e){alert(e.message);}
}

Новости » Вышел Firefox 23 » 19-08-2013 22:10:48

Lain_13 пишет:

SunnyDay
Весьма вероятно что что-то изменилось в движке JS. Тебе нужно либо интересоваться тем, как он работает, и под него подстраиваться (иногда один и тот же цикл, записанный разными способами, может работать с разницей в десятки и сотни раз в скорости) или переписать свой алгоритм на чём-то вроде C++ и «скомпилировать» в asm.js.

Спс, всё это интересно, но метр кода под компилятор перелопачивать не хотелось бы :) Да и не шибко гонюсь за производительностью, просто хотелось бы вернуть, как было, а то на вопросы клиентов - почему тупит, заставлять их переставлять 22й фокс, как-то не айс.  А вот по поводу изменений в движке, мне кажется это какие-то настройки безопасности - с 3го по 22й фаерфокс работало нормально а тут бах, и все скрипты, даже которые не относятся к распознаванию изображений работают медленнее..


Я наверное проведу тесты, выясню конкретно, что тормозит там - замыкания, циклы, объявления переменных, итп, или

Новости » Вышел Firefox 23 » 19-08-2013 13:58:03

День добрый всем! С 23м фаерфоксом у меня появилась проблема - значительно медленнее (раза в полтора-два) стал работать javascript по сравнению с 22м фоксом. Я разработчик плагина с тяжёлым алгоритмом распознавания изображений - мои пользователи сразу все заметили падение производительности. Подскажите пожалуйста, с чем это может быть связано? Тесты пока не проводил, но потом если это только я заметил, проведу детальнее анализ..

Разработка » Отправка щелчков мышки во flash-объекты из расширения » 25-02-2013 14:44:10

По просьбе орец выкладываю рабочий код кормёжки флеша событиями:

обновлённый класс работы с windows (linux пока не заморачивал..)
[code]
var YBOSWrapper = {
    loaded: false,
    //объявление windows-типов
    CallBackABI: false,
    WinABI: false,
    EnumWindowsProc: false,
    //windows-функции
    EnumWindows: false,
    EnumChildWindows: false,
    PostMessage: false,
   
    load: function () {
        try{
            eval('Components.utils.import("resource://gre/modules/ctypes.jsm")');
            this.user32dll = ctypes.open("user32.dll");
            /*
                Linux
                ctypes.open("libc.so.6");
                Most other Unixes
                libc = ctypes.open("libc.so");
            */
            if (ctypes.size_t.size == 8) {
                this.CallBackABI = ctypes.default_abi;
                this.WinABI = ctypes.default_abi;
            } else {
                this.CallBackABI = ctypes.stdcall_abi;
                this.WinABI = ctypes.winapi

Разработка » Теоретический вопрос по расширениям » 16-11-2012 09:38:59

А зачем тебе заменять скрипты, почему бы просто не добавлять свой фунционал? В фаерфоксе событие DOMContentLoaded, реализуется добавление скрипта например так: target_document.defaultView.wrappedJSObject.eval(Yo_js_inject)

Разработка » Проблема с WWW-Authenticate: Basic в FF » 16-11-2012 09:29:34

это уже php и к фаерфоксу никак не относится, пропиши

header('Content-Type: text/html; charset=utf-8');

Разработка » Вопрос по существу » 15-11-2012 15:36:08

уж не знаю что есть 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 лет бы не знал)

Разработка » Как создать двусторонний обмен данными: расширения с кодом инъекции? » 15-11-2012 15:13:14

Есть много способов, первый - WJO:

Выделить код

Код:

//в JS расширения
alert(content.document.defaultView.wrappedJSObject.some_target_JS_var);//читаем внешнюю переменную
content.document.defaultView.wrappedJSObject.some_target_JS_var = 'afk';//записываем внешнюю переменную
content.document.defaultView.wrappedJSObject.some_target_JS_func('fukfuk');//выполняем внешнюю функцию

второй более архитектурный(observer) - свои события:

Выделить код

Код:

//в JS target-документа
...
MyEvent = document.createEvent("Events")
MyEvent.initEvent("MyEvent", true, false);
...
MyEvent.someparam = someval;
SomeDomElement.dispatchEvent(MyEvent);

//в JS расширения
content.document.getElementById('SomeDomElement').addEventListener('MyEvent',  some_dispatch_function);
var some_dispatch_function = function(event){
 alert(event.target.getAttribute('id'));
 alert(event.someparam);
}

Разработка » Отправка щелчков мышки во flash-объекты из расширения » 09-11-2012 18:00:03

Проблемма решена! Как и обещал, выкладываю решение:

небольшая обёрточка на js-ctypes для работы с windows-окнами, и отправки событий мышки:
[code]
var YBWindows = {
    loaded: false,
    //объявление windows-типов
    CallBackABI: false,
    WinABI: false,
    EnumWindowsProc: false,
    //windows-функции
    EnumWindows: false,
    EnumChildWindows: false,
    PostMessage: false,
   
    load: function () {
        try{
            eval('Components.utils.import("resource://gre/modules/ctypes.jsm")');
            this.user32dll = ctypes.open("user32.dll");
            /*
                Linux
                ctypes.open("libc.so.6");
                Most other Unixes
                libc = ctypes.open("libc.so");
            */
            if (ctypes.size_t.size == 8) {
                this.CallBackABI = ctypes.default_abi;
                this.WinABI = ctypes.default_abi;
            } else {
                this.CallBackABI = ctypes.stdcall_abi;
                this.WinABI = ctyp

Разработка » Сграбить js картинку из DOM » 09-11-2012 13:50:19

Именно с методом drawWindow она прозрачна мало того для секьюрности фаерфокса, так и в target-документе нельзя отловить, что ты забираешь скриншот с документа.

Разработка » Сграбить js картинку из DOM » 09-11-2012 12:14:53

Выделить код

Код:

...
<!-- где-то в твоём XUL -->
<html:canvas id="xcanvas" style="display:none;" width="600" height="400"/>
<!-- усё -->
...

глобальную позицию можно вычислить следущей ф-ей

Выделить код

Код:

function elGlobalPos(element, brel)
{
        var offsetLeft=0;
        var offsetTop=0;
        do {
            if (brel != undefined && element == brel) break;
            offsetLeft += element.offsetLeft;
            offsetTop += element.offsetTop;
        }while (element = element.offsetParent);
        var ret= new Object();
        ret.x=offsetLeft; ret.y=offsetTop;
        return ret;
};
Выделить код

Код:

//.. где-то в твоём жаваскрипте
//target_document - документ, в котором находится картинка с id=capcha
var some_dom_img_element =  target_document.getElementById('capcha');
var pos = elGlobalPos(some_dom_img_element); //получаем глоб-позицию нужного элемента
var width = some_dom_img_element.getAttribute('width');
var height = some_dom_img_element.getAttribute('height');

var canvas = document

Разработка » Отправка щелчков мышки во flash-объекты из расширения » 25-10-2012 18:04:56

Ясно, спасибо. Что-то придумаю, решение кину в тему. Кнопки в флеше не являются окнами, покрайней мере в AS3.
- но для win32-приложений это обычное дело
В идеале - найти нужную вкладку ФФ, и послать туда событие, после этого по логике флеш-плеер должен задиспечить событие себе тоже. Вкладка ФФ это ведь отдельное окно в win32?

Разработка » Отправка щелчков мышки во flash-объекты из расширения » 25-10-2012 14:54:10

hydrolizer пишет:

SunnyDay
js-ctypes + mouse_event/SendInput. Других способов нет.

Большое спасибо за инфу, отличное решение!

Единственное, в первый раз слышу о js-ctypes, тоесть надо примерно так сделать:
1. Импортим ctypes.
2. Грузим user32.dll для винды
3. Далее выполняем из user32.dll цепочку mouse_event  - с зажатой левой кнопкой мыши, затем с отжатой (эмулируя тем самым щелчок) в нужных координатах.

Всё верно? Если реализовывал сам, поделись плиз кусочком кода =)

Разработка » Отправка щелчков мышки во flash-объекты из расширения » 25-10-2012 12:54:23

-и все события они обрабатывают напрямую и сами
вот это печально.. Тоесть флеш спрашивает у ОС координаты мышки/какие клавиши сейчас нажаты, а не у фоерфокса?

-о наверное никак
один то способ есть всегда, но он уж черезчур костыльный, и будет работать только на флеш-плеере debug версии:
1. Ставим флеш-дебаг версию.
2. Указываем профайлер для флеша, наподобие как это делается в расширении Flash Firebug - можно и взять FFBug-профайлер.
3. Обмениваемся данными с флешом нативными методами swf.flashfirebug_send(some_data) в том числе можно посылать скрипты, в том числе и создавать события.

Разработка » Отправка щелчков мышки во flash-объекты из расширения » 25-10-2012 12:38:39

Известно, что при симуляции события из под расширения, например щелчка по какому либо элементу:

Выделить код

Код:

evt = target_document.createEvent("MouseEvents");
evt.initMouseEvent("click", true, true, target_document.defaultView, 1, x+ox, y+oy, x, y, false, false, false, false, v, null);
element.dispatchEvent(evt);

оно посылается с параметром trusted=true , тоесть ведёт себя в принципе как настоящее, и target_document его видит как настоящее. Тоесть по логике при симуляции щелчка на sfw объекте, фаерфокс должен передать события в Flash интерпретатор, но он этого не делает. Собственно необходимо симулировать щелчок на flash-кнопке. Пробовал сделать:  DOM видит событие, а во flash не выполняется действие по щелчку в заданных координатах - тоесть во флеше событие не пошло.

Вопрос - как средствами фаерфокс-расширения кормить флешу события, чтобы он их обрабатывал ровно также, как настоящие щелчки/перемещения мышки, нажатия клавиш?

Буду очень благодарен за любую помощь и ссылки!

Разработка » Взаимодействие flash и JS в расширении » 03-09-2012 14:44:16

нашёл замечательное расширение https://addons.mozilla.org/ru/firefox/addon/flashfirebug/?src=ss он может инспектировать флеш полностью в виде дерева. Этот дебаггер обладает как-раз нужным функционалом, хоть и требует debug-версию флеша. Буду копать сорцы, всем спасибо.

Разработка » Взаимодействие flash и JS в расширении » 03-09-2012 13:41:25

Да, для автоматизации. Спасибо за совет, пока я ещё не разобрался в том, что такое FlexMonkey но по-моему это явно не JavaScript библиотека?

Разработка » Взаимодействие flash и JS в расширении » 03-09-2012 12:39:24

Всем доброго времени суток! Итересует возможность доступа из JS-кода расширения во флеш. Нашёл вот такую темку, где во флеш-пространство ломятся через wrappedJSObject http://forum.mozilla-russia.org/viewtopic.php?id=24823 . Интересно узнать побольше информации об flash.wrappedJSObject - поискал, ничего путного не нашёл. Конкретно интересует:
1. Возможно ли получить дерево флеш-объектов из флешки?
2. Возможно ли посылать события во флеш - например щелчок на определённую кнопку, или щелчок во флешке по заданным координатам?

Если кто знает ссылки или информацию по данной теме, поделитесь пожалуйста, буду благодарен.

Разработка » Работа с изображениями дочернего документа из скриптов расширения » 21-03-2010 00:34:00

если сохраняется в кеш,  то в принципе легко будет там эту капчу найти... Но кеш я так понимаю тут
Local Settings\Application Data\Mozilla\Firefox\Profiles\0un7fhmb.default\Cache
а там этого не было.. Придётся отложить пока этот вопрос)

Разработка » Работа с изображениями дочернего документа из скриптов расширения » 18-03-2010 01:42:44

okkamas_knife
Там капчу выдаёт пхп скрипт, и если на этот скрипт послать запрос второй раз, капча будет другая... А уже загруженную в браузере картинку можно в файл сохранить, без getImageData? Если да, то это решило бы всю проблемму)

Разработка » Работа с изображениями дочернего документа из скриптов расширения » 17-03-2010 03:05:00

Да, видимо задача специфичнаяя, может есть какие-нибудь XPCOM интерфейсы для этого?

Разработка » Взаимодействие Flash и расширения » 17-03-2010 03:01:28

Elena
Советую почитать про снятие ограничений безопасности через XPCOM)
http://www.intuit.ru/department/se/mozilla/16/10.html

Разработка » Взаимодействие Flash и расширения » 16-03-2010 04:04:22

>как из javascript получить доступ к функции которая описано внутри iframe

frame_window.wrappedJSObject.function_in_frame()

Разработка » Работа с изображениями дочернего документа из скриптов расширения » 16-03-2010 00:25:40

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

Выделить код

Код:

  var readCnv = docu.createElement("CANVAS");
   var image = docu.getElementsByTagName('IMG')[0];

 readCnv.setAttribute("width", image);
  readCnv.setAttribute("heigth", image);
  docu.body.appendChild(readCnv);


  var ctxA = readCnv.getContext('2d');
  ctxA.drawImage(image , 0, 0);
  var imgDA = ctxA.getImageData(0, 0, image.width, image.height);

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

Это всё мне нужно для того чтобы расшифровать картинку-капчу.
До недавних пор я обходил это так - вставлял динамически в документ, содержащий изображение, этот скрипт. Но модификация исходного кода данного документа уже не прокатывает - создатели проекта(бр

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2011 Mozilla Russia
Язык отображения форума: [Русский] [English]