Плагин NPAPI не отображается в about:plugins в google chrome

Я рассмотрел вопросы на этом форуме, касающиеся этих проблем, но я не нашел ни одного запроса, связанного с той проблемой, с которой я столкнулся. Я написал плагин NPAPI, который отлично работает с GtkLauncher (поставляется с webkit) и firefox, но с google-chrome (18.0.1025.151) плагин даже не отображается в about:plugins. Я работаю на Ubuntu 10.10.

Когда я загружаю плагин в google-chrome, в браузере мне не удалось загрузить плагин, но на консоли ничего не отображается. Я сомневаюсь, вызывается ли моя функция NP_Initialize.

Вот код NP_Initialize:

-------------------------------
NPError OSCALL
NP_Initialize(NPNetscapeFuncs *npnf
#if !defined(_WINDOWS) && !defined(WEBKIT_DARWIN_SDK) 
    , NPPluginFuncs *nppfuncs)
#else
)
#endif

{
MEDIA_DEBUG_PRINT("\nwcf Media plugin: NP_Initialize");
    if(npnf == NULL)
        return NPERR_INVALID_FUNCTABLE_ERROR;
    if(HIBYTE(npnf->version) > NP_VERSION_MAJOR)
        return NPERR_INCOMPATIBLE_VERSION_ERROR;

    npnfuncs = npnf;

    #if !defined(_WINDOWS) && !defined(WEBKIT_DARWIN_SDK)
        NP_GetEntryPoints(nppfuncs);                            
    #endif

    return NPERR_NO_ERROR;

}

NPError OSCALL
NP_GetEntryPoints(NPPluginFuncs *nppfuncs) 
{

    MEDIA_DEBUG_PRINT("\nwcf Media plugin: NP_GetEntryPoints"); 
    nppfuncs->version = (NP_VERSION_MAJOR << 8) | NP_VERSION_MINOR; 
    nppfuncs->newp = nevv; 
    nppfuncs->destroy = destroy; 
    nppfuncs->getvalue = getValue; 
    nppfuncs->event = handleEvent; 
    nppfuncs->setwindow = setWindow; 

    return NPERR_NO_ERROR;
}

Я знаю, что существует платформа Firebreath для кросс-браузерной разработки, которую я планирую использовать, но в настоящее время мне нужно, чтобы мой плагин работал на хроме.

Может ли кто-нибудь помочь мне решить мою проблему?

Спасибо и С уважением, Сувик


person Souvik    schedule 08.04.2012    source источник


Ответы (2)


Chrome имеет тенденцию быть немного более разборчивым в том, как что-то запускается. Я не вижу здесь ничего, что могло бы вызвать вашу проблему, но Chrome известен тем, что отклоняет плагины, которые ведут себя не так, как ожидалось. Скорее всего, ваша проблема появится позже; вы говорите, что сомневаетесь, что ваш NP_Initialize вызывается, на вашем месте я бы проверил это. Сделайте запись в файл в /tmp/ или что-то еще, чтобы убедиться.

Также вы не указали ни одну из других точек входа, таких как NP_GetPluginVersion или NP_GetMimeDescription. Они также необходимы для плагина Linux и вполне могут быть причиной такой проблемы. Для справки взгляните на файл точки входа FireBreath X11.

Наконец, возможно, что то, как вы установили плагин, обнаруживается Mozilla, а не Chrome; как ты его установил?

person taxilian    schedule 08.04.2012
comment
Спасибо за ваш ответ. На самом деле, я дал печать консоли - MEDIA_DEBUG_PRINT(\nwcf Media plugin: NP_Initialize); в функции NP_Initialize(), которая не печатается при загрузке в Chrome. - person Souvik; 09.04.2012
comment
Да, я в курсе, что у вас консольный принт; однако я совсем не уверен, что вы, вероятно, увидите результаты этого вывода, поскольку вы находитесь в отдельном процессе от chrome, и мой опыт показывает, что стандартный вывод часто перенаправляется куда-то в эти случаи. Если вы отправите его в файл, то можете быть уверены. - person taxilian; 09.04.2012
comment
Хорошо, я проверю это немедленно. Я создаю программную ссылку моих файлов .so в папку /usr/lib/mozilla/plugins. У меня также есть функции ввода для MIME и версии. Вот содержимое: char* NP_GetMIMEDescription(void){return (char*)application/x-wcfconn:wcf:Это подключаемый модуль;} char * NP_GetPluginVersion(){return (char*)PLUGIN_VERSION;} - person Souvik; 09.04.2012
comment
В NP_Initialize я создал файл /tmp/test и написал строку. Этот файл не создается, когда я пытаюсь загрузить плагин в Chrome. Но тот же файл создается и записывается, когда я загружаю плагин в GtkLauncher. Итак, моя функция NP_Initialize не вызывается в Chrome. - person Souvik; 09.04.2012
comment
Если вы добавляете код и детали, лучше отредактировать исходный вопрос и поместить их туда; тут тяжело читать. Попробуйте поместить свой плагин в /usr/lib/chromium-browser/plugins вместо /usr/lib/mozilla/plugins; может быть, что хром 6 просто не смотрит туда. Также я надеюсь, что вы имели в виду симлинк, а не софтлинк =] - person taxilian; 09.04.2012

Если ваш плагин не отображается в chrome://plugins, значит, он не работает во время первоначального сканирования плагинов. Попробуйте запустить с флагом --debug-plugin-loading, который должен дать вам запись журнала в тот момент, когда регистрация вашего плагина не удалась.

person smorgan    schedule 10.04.2012
comment
Большое спасибо. После запуска google-chrome с --debug-plugin-loading я могу получить некоторые журналы консоли. В журнале консоли я заметил, что мой плагин не может загрузить другую библиотеку DBAccessLib (моя собственная библиотека, которую я использую для доступа к базе данных путем привязки к sqlite3). и выдает ошибку: неопределенный символ: sqlite3_sprintf), пропуская . Возможно, Google Chrome не может найти библиотеку libsqlite3. - person Souvik; 10.04.2012