2012-07-13 3 views
0

Я новичок в StackOverflow и QtWebkit.Плагин Npapi не обнаружен в demobrowser QtWebkit

Я написал очень простой плагин NPAPI, который имеет такие функции, как NP_GetMimeTypeDescription и Np_Initialise и т.д. для MIMETYPE application/basic-plugin и описание MIMETYPE application/basic-plugin:bsc:Plug-ins SDK sample.

Но я столкнулся с проблемой при загрузке его на demobrowser QtWebKit, а также в Mozilla Firefox. Я поместил сгенерированный файл .so в пути, где когда-либо браузер находит плагины, такие как /usr/lib/mozilla/plugins/ и Qt Lib.

У меня есть файл test.html, который содержит Mimetype application/basic-plugin. Я пытаюсь запустить этот плагин как в браузере Mozilla, так и в QtWebKit Demo Browser. Но в обоих случаях он не запускает плагин.

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

+1

это появляется примерно в: плагинах? – taxilian

+0

Привет Это не отображается в: плагины в mozilla. Я не могу понять, почему ..... – Techtotie

+0

попробуйте загрузить firefox в режиме отладки (firefox -g); вы можете увидеть что-то полезное в выходе. Когда вы добираетесь до консоли gdb, просто введите run – taxilian

ответ

1

Спасибо за помощь и предложения.
Мне удалось выяснить, почему мой плагин не был вызван, , даже если я поместил файл .so в правильные папки /usr/lib/mozilla/plugins/и Qt Lib path.

Были 2 причины ...

  1. пришлось включить Определить XP_UNIX (-DXP_UNIX) во время компиляции в качестве директивы компилятора. Это будет рассматривать различные прототипы функций, а также реализация

    extern "C" 
    NPError OSCALL NP_Initialize(NPNetscapeFuncs *browserFuncs 
    #ifdef XP_UNIX 
              , NPPluginFuncs *pluginFuncs 
    #endif 
             ) 
    { 
         // keep a pointer to the browser functions 
         g_browser = browserFuncs; 
    
         // any memory that is to be shared by all instances of 
         the browser plugin should be initialized here. 
         ; 
    
    #ifdef XP_UNIX 
         // under Linux, as the browser won't call NP_GetEntryPoints() 
         explicitly, do it now to fill in <pluginFuncs> 
    
         return NP_GetEntryPoints(pluginFuncs); 
    #else 
    
         return NPERR_NO_ERROR; 
    #endif 
    } 
    

и

extern "C" 
    #ifdef XP_UNIX 
    NPError NP_GetValue(void* instance, NPPVariable variable, void *value) 
    #else 
    NPError NP_GetValue(NPP instance, NPPVariable variable, void *value) 
    #endif 

2 .. Были 2 функции NP_GetValue и NPP_GetValue.

extern "C" 
NPError NP_GetValue(void* instance, NPPVariable variable, void *value); 

и

NPError NPP_GetValue(NPP instance, NPPVariable variable, void *ret_value); 

NPP_GetValue функция плагин, регистрация должна быть сделана в NP_GetEntryPoints

extern "C" 
    NPError OSCALL NP_GetEntryPoints(NPPluginFuncs* NPPluginFuncsptr) 
    { 
      ...... 
      NPPluginFuncsptr->newp = NPP_New; 
      NPPluginFuncsptr->getvalue = NPP_GetValue; 
      NPPluginFuncsptr->setvalue = NPP_SetValue; 
      return NPERR_NO_ERROR; 
    } 

В моем коде только NP_GetValue был реализован и NPP_GetValue не был реализован. Так что NPP_GetValue не был определен в .so, и из-за этого .so не загружался.

При реализации функции NPP_GetValue эта функция была определена и экспортирована в файл .so и была успешно загружена.

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

  1. NP_Initialize -> Браузер вызывает функцию инициализации первым. (В случае Linux множество функций плагина должна быть экспортирована по телефону NP_GetEntryPoints Как браузер в явной форме не будет вызывать GetEntryPoints)

  2. NP_GetEntryPoints -> Called явно из NP_Initialize для Linux в разоблачить/экспорта функции плагина.

  3. переменная NP_GetValue: 1 -> Вызывается из браузера получить Plugin Name (NPPVpluginNameString)

  4. переменная NP_GetValue: 2 -> Вызывается из браузера получить Plugin Описание (NPPVpluginDescriptionString)

  5. NP_GetMimeDescription -> Вызывается из браузера, чтобы получить MimeType Описание (Эта функция должна возвращать описание типа Mime например: return («application/basic-plugin: bsc: пример SDK SDK»);)

  6. NPP_New -> Вызывается из браузера для создания экземпляра плагина.

  7. NPP_GetValue PLUGIN: main.cpp, NPP_GetValue, 446ENTRY -> Вызывается из браузера, чтобы получить конкретные данные плагин ...

  8. ......

Пожалуйста, обратите внимание, что следующая функция в приведенной выше последовательности будет называться IF и ТОЛЬКО ЕСЛИ предыдущий вызов функции возвращает успех. :-)

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

  • Нет связанных вопросов^_^