Надстройка Firefox выполняется только в состоянии отладки

Я разработал надстройку для связи со смарт-картой. Я использовал winscard.dll и его функции (такие как создание, подключение, передача).

//less-privileged scope like jsp 

var element = document.createElement("MyExt1");
document.documentElement.appendChild(element);
var evt = document.createEvent("Events");
evt.initEvent("SCardConnect", true,false);
element.dispatchEvent(evt);
var CardHandle = element.getAttribute("CardHandle");
alert(CardHandle);

и

//privileged scope which exist in my add-on

.
.
.
var MyExtension1 = {
    Connect : function(evt){
        ...
        evt.target.setAttribute("CardHandle", CH.toString());
        var doc = evt.target.ownerDocument;
        var AnswerEvt = doc.createElement("SCardConnect");
        doc.documentElement.appendChild(AnswerEvt);
        var event = doc.createEvent("HTMLEvents");
        event.initEvent("ConnectEvent",true,false);
        AnswerEvt.dispatchEvent(event);
    }
}    
.
.
.
document.addEventListener("SCardConnect", function(e){myExtension1.Connect(e);}, false, true);

После небольшого вступления, это моя проблема:

Когда я устанавливаю надстройку в Firefox и шаг за шагом отлаживаю код через F10, он работает нормально, однако, если я хочу запустить внешний скрипт без перерыва (без отладки), он возвращает null, когда я получаю атрибуты.

Это основанный на событиях подход к вызову дополнительной функции из внешней функции скрипта. Существует еще один подход, в котором используется export function, и у меня возникает следующая проблема: файл">https://stackoverflow.com/questions/32450103/вызов-a-firefox-add-on-function-from-an-external-javascript-file


person Hosein Aqajani    schedule 07.10.2015    source источник
comment
у вас есть синтаксические ошибки в первой части кода, пожалуйста, исправьте их   -  person micnic    schedule 07.10.2015
comment
@micnic спасибо за ваше издание, я исправил синтаксические ошибки.   -  person Hosein Aqajani    schedule 07.10.2015
comment
Я думаю, что проблема связана с подходом, основанным на событиях. Есть ли альтернативный механизм для вызова дополнительных функций из внешнего скрипта без события? Я уже пробовал export function в js-ctypes, однако это не сработало. Как я спросил в stackoverflow.com/questions/32688218/.   -  person Hosein Aqajani    schedule 07.10.2015
comment
Если есть внешняя программа, вы можете использовать child_process: developer.mozilla.org/en-US/Add-ons/SDK/Low-Level_API/ будет ли это работать?   -  person Noitidart    schedule 08.10.2015
comment
дорогой @Noitidart, как я могу использовать эту требуемую функцию или другие функции в моем jsp? Я думаю, что функция require в javascript не определена.   -  person Hosein Aqajani    schedule 10.10.2015
comment
Есть ли у вас какое-либо представление о export function и особенно о моем этом сообщении: stackoverflow.com/questions/32688218/   -  person Hosein Aqajani    schedule 10.10.2015
comment
Также я понял, что скорость событийного метода слишком мала и для моего случая он неприменим :(   -  person Hosein Aqajani    schedule 10.10.2015
comment
Вы можете использовать require, аддон, который мы сделали, подходит для jpm, поэтому вы можете использовать require в index.js. Однако вы не можете использовать его в ChromeWorker. Эта ссылка ведет на удаленную тему.   -  person Noitidart    schedule 10.10.2015
comment
Извините, я заменил этот вопрос следующим: of-firefox-add-on-in-c" title="какой простой и быстрый способ вызова функции надстройки firefox в c">stackoverflow.com/questions/32450103/   -  person Hosein Aqajani    schedule 11.10.2015
comment
Я обнаружил, что этот тип подхода на основе событий устарел, и есть новый подход, называемый Custom Event, на странице developer.mozilla.org/en-US/docs/Web/Guide/Events/…, однако я не понял, как преобразовать два вышеупомянутых кода!   -  person Hosein Aqajani    schedule 12.10.2015
comment
@Noitidart Я все еще открываю для себя что-то новое. В менее привилегированной области, если мы поместим alert() после отправки команды, она будет работать правильно. Сначала я думаю, что это требует некоторой задержки, поэтому я комментирую alert() и ставлю задержку после отправки, но установка задержки не работает. Что произойдет, если я поставлю предупреждение после функции отправки?   -  person Hosein Aqajani    schedule 13.10.2015
comment
Также где-то в Mozilla говорится, что initEvent устарел, однако он использовал его в developer.mozilla.org/en-US/Add-ons/Code_snippets/ .   -  person Hosein Aqajani    schedule 13.10.2015
comment
Вы собираетесь вызывать функцию, которая уже была реализована в вашей надстройке firefox, со страницы jsp, не так ли?   -  person Hamed    schedule 13.10.2015
comment
@Hamed да, я хочу сделать то, что вы сказали, и я нашел только подход, основанный на событиях, который имеет много проблем, таких как медлительность.   -  person Hosein Aqajani    schedule 13.10.2015
comment
Разместите две кнопки на странице jsp и переместите 'var CardHandle = element.getAttribute(CardHandle);' на вторую кнопку. Тогда дайте мне знать результат.   -  person Hamed    schedule 13.10.2015
comment
Yessssss, это работает без вставки предупреждения после отправки :)   -  person Hosein Aqajani    schedule 13.10.2015


Ответы (1)


Возможно, вы захотите переместить 'var CardHandle = element.getAttribute("CardHandle");' в новую функцию и проверьте, было ли ее значение действительным или нет в указанных интервалах.

var varTimer = setInterval(function(){ myTimer() }, 1000);

function myTimer() {
    var CardHandle = element.getAttribute("CardHandle");
    if(CardHandle is valid) stopTimer();
}

function stopTimer() {
    clearInterval(varTimer);
}
person Hamed    schedule 14.10.2015