2013-04-04 2 views
-1

Я пытаюсь закодировать приветственный пример плагина NPAPI. Я выполнил все основные функции, необходимые, и я добавил функцию Get_String(), которая возвращает глобальную строку hello.Функции NPAPI Вызывается Javascript

После создания браузер может обнаружить плагин и всю информацию, связанную с этим, но я не могу вызвать функцию Get_String() из JavaScript! Вот некоторые код: plugin.c

#define PLUGIN_NAME  "Name Plugin" 
#define PLUGIN_DESCRIPTION " Plugin Description" 
#define PLUGIN_VERSION  "1.0" 

static NPNetscapeFuncs* sBrowserFuncs = NULL; 

NP_EXPORT(NPError) 
NP_Initialize(NPNetscapeFuncs* bFuncs, NPPluginFuncs* pFuncs) 
{ 
    sBrowserFuncs = bFuncs; 

    if (pFuncs->size < (offsetof(NPPluginFuncs, setvalue) + sizeof(void*))) 
    return NPERR_INVALID_FUNCTABLE_ERROR; 

    pFuncs->newp = NPP_New; 
    pFuncs->destroy = NPP_Destroy; 

    return NPERR_NO_ERROR; 
} 


NP_EXPORT(char*) 
NP_GetPluginVersion() 
{ 
    return PLUGIN_VERSION; 
} 


NP_EXPORT(const char*) 
NP_GetMIMEDescription() 
{ 
    return "application/my-plugin::"; 
} 


NP_EXPORT(NPError) 
NP_GetValue(void* future, NPPVariable aVariable, void* aValue) { 
    switch (aVariable) { 
    case NPPVpluginNameString: 
     *((char**)aValue) = PLUGIN_NAME; 
     break; 
    case NPPVpluginDescriptionString: 
     *((char**)aValue) = PLUGIN_DESCRIPTION; 
     break; 
    default: 
     return NPERR_INVALID_PARAM; 
     break; 
    } 
    return NPERR_NO_ERROR; 
} 


NP_EXPORT(NPError) 
NP_Shutdown() 
{ 
    return NPERR_NO_ERROR; 
} 


NPError NPP_New(NPMIMEType pluginType, NPP instance, uint16_t mode, int16_t argc, char* argn[], char* argv[], NPSavedData* saved) 
{ 

    return NPERR_NO_ERROR; 
} 


NPError NPP_Destroy(NPP instance, NPSavedData** save) 
{ 

    return NPERR_NO_ERROR; 
} 

char* Get_String() 
{ 
    return "hello world from Get function" ; 
} 

void Set(NPObject object){} 

test.html

<doctype html> 
<html> 
<head> 
<script> 
    var plugin = document.getElementById("plugin"); 
    console.log(plugin.Get_String()); 
</script> 
</head> 
<embed id="plugin" type="application/typemine-plugin"> 
<body> 
</body> 
</html> 
+0

Вы прочитали учебник [NPAPI] (http://colonelpanic.net/2009/03/building-a-firefox-plugin-part-one/) или [documentation] (https: //developer.mozilla .org/EN-US/Docs/Gecko_Plugin_API_Reference/Scripting_plugins)? Знаете ли вы о более простых вариантах, таких как [Firebreath] (http://www.firebreath.org/)? –

+0

Да, я посмотрел на него и на других. Но в моем случае мне это не нужно. Я хочу сделать это с большим трудом. –

+0

Итак, прочитали ли вы учебник и/или документацию? Похоже, вам не хватает всех настроек, необходимых для сценариев, и ожидайте, что простая функция C будет доступна только из JS. –

ответ

1

Вам необходимо предоставить браузер with a custom scriptable object из NPP_GetValue(). Это необходимо для того, чтобы браузер узнал, какие методы и свойства имеет ваш плагин, чтобы вызвать их и т. Д.

Вы можете найти общий обзор реализации сценариев в part 3 of taxilians tutorial.

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