2017-01-03 5 views
0

Я реализовал плагин NPAPI, который работает в Firefox. Затем я попытался добавить метод, который принимает функцию со стороны JavaScript как обратный вызов.Невозможно использовать таймер POCO в плагине NPAPI

Первоначально я попытался вызвать этот метод обратного вызова немедленно в том же методе, который ничего не сделал на стороне JavaScript.

Затем я попытался реализовать таймер, используя Poco :: Util :: Timer и TimerTask. Когда вы пытаетесь создать экземпляр Timer или TimerTask любым способом в коде, Firefox больше не будет загружать плагин. В: плагинах нет следов плагина.

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

Любые указатели будут наиболее полезными. Я могу отправить код, если потребуется.

+0

Чтобы проверить, знаете ли вы, что поддержка NPAPI будет удалена из Firefox с выпуском в следующем месяце? – taxilian

+0

Да, единственная причина, по которой я выбрал NPAPI, - это то, что я сначала посмотрел на PPAPI, и он не может сделать то, что мне нужно, чтобы напрямую вызвать методы и прочитать свойства в плагине. Поскольку это для коммерческого проекта (тестирование и проверка приложений JavaScript, запущенных на собственной платформе с использованием плагинов на основе NPAPI), у нас мало выбора. – MayaPosch

+0

PPAPI также не может использоваться без специальных флагов командной строки, чтобы включить ваш плагин ... это никоим образом не замена для NPAPI. – taxilian

ответ

1

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

Сначала я вернусь к первому тестированию, потому что вызов NPObject, переданного (с использованием InvokeDefault), должен сработать, если вы сделаете это немедленно.

Я полагаю, что с вашими таймерами вы, вероятно, работаете либо в другом потоке, либо пытаетесь узурпировать цикл сообщений в потоке плагина, оба из которых вызовут проблемы. Вы смотрели на FireBreath? FireBreath 1, вероятно, даст вам все, что вам нужно, без необходимости знать все детали реализации NPAPI.

+0

Я посмотрел на Firebreath, но не был уверен, что проект поддерживается. Вероятно, вы правы в том, что Poco Timer не играет хорошо с циклом сообщений плагина. Я дам исходный код (сразу же вызывая метод по умолчанию) еще одну попытку, но я считаю, что плагины чрезвычайно трудно отлаживать. – MayaPosch

+0

Поддерживается относительный термин. Существует не так много активного развития, потому что никто, кажется, не чувствует необходимости вносить свой вклад, и нет никаких серьезных ошибок, но автор (я) все еще существует. – taxilian

+0

Благодарим вас за помощь, я вернулся к прямому вызову обратного вызова в методе, который его получил, и обнаружил, что причина, по которой он, похоже, не работал раньше, был вызван ошибкой JavaScript (экземпляр JSON.stringify() встроенный в другой). – MayaPosch

Смежные вопросы