2012-04-08 10 views
3

Ich habe die Fragen in diesem Forum in Bezug auf diese Probleme durchlaufen, aber ich habe keine Abfrage im Zusammenhang mit der Art des Problems, das ich konfrontiert bin. Ich habe ein NPAPI-Plugin geschrieben, das mit GtkLauncher (kommt mit Webkit) und Firefox gut funktioniert, aber mit google-chrome (18.0.1025.151) taucht das Plugin nicht einmal in: plugins auf. Ich laufe auf Ubuntu 10.10.NPAPI Plugin zeigt nicht in etwa: Plugins in Google Chrome

Wenn ich das Plugin in Google-Chrome geladen habe, bekomme ich im Browser einen Fehler beim Laden des Plugins, aber auf der Konsole wird nichts angezeigt. Ich bezweifle, dass meine NP_Initialize-Funktion aufgerufen wird.

Hier ist der NP_Initialize Code:

------------------------------- 
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; 
} 

Ich weiß, es ist ein firebreath Rahmen für die Cross-Browser-Entwicklung, die ich Plan zu verwenden, aber derzeit muss ich mein Plugin bekommen auf Chrom ausgeführt.

Kann mir bitte jemand helfen, mein Problem zu lösen?

Danke und Grüße, Souvik

Antwort

3

Chrome neigen über ein bisschen wählerischer zu sein, wie die Dinge starten. Ich sehe hier nichts, was Ihr Problem verursachen könnte, aber Chrome ist bekannt dafür, Plug-ins abzulehnen, die sich nicht so verhalten, wie sie es erwarten. Höchstwahrscheinlich ist Ihr Problem später; Sie sagen, dass Sie bezweifeln, dass Ihr NP_Initialize aufgerufen wird, wenn ich Sie wäre, würde ich das bestätigen. Lass es in/tmp/etwas in eine Datei schreiben, um sicherzugehen.

Sie haben auch keinen Ihrer anderen Einstiegspunkte wie NP_GetPluginVersion oder NP_GetMimeDescription bereitgestellt. Diese werden auch für ein Linux-Plugin benötigt und könnten möglicherweise für ein Problem wie dieses verantwortlich sein. Als Referenz sehen Sie sich FireBreath's X11 entrypoint file an.

Schließlich ist es möglich, dass die Art, wie Sie das Plugin installiert haben, von Mozilla und nicht von Chrome gefunden wird; Wie hast du es installiert?

+0

Vielen Dank für Ihre Antwort. Eigentlich habe ich einen Konsolenabdruck gegeben - MEDIA_DEBUG_PRINT ("\ nwcf Media plugin: NP_Initialize"); in der Funktion NP_Initialize(), die beim Laden in Chrome nicht gedruckt wird. – Souvik

+0

Ja, mir ist bewusst, dass Sie einen Konsolendruck haben. Ich bin mir jedoch nicht sicher, ob Sie wahrscheinlich die Ergebnisse dieses Drucks * sehen * werden, da Sie sich in einem separaten Prozess von Chrome befinden, und ich habe die Erfahrung gemacht, dass in diesen Fällen Stdout oft umgeleitet wird. Wenn Sie es an eine Datei senden, können Sie sicher sein. – taxilian

+0

Ok, ich werde das sofort überprüfen. Ich erstelle eine Soft-Verknüpfung meiner .so-Dateien zum Ordner/usr/lib/mozilla/plugins. Ich habe auch Zugangsfunktionen für MIME und Version. Hier sind die Inhalte: char * NP_GetMIMEDescription (void) {zurück (char *) "application/x-wcfconn: wcf: Dies ist ein Connectivity-Plugin";} char * NP_GetPluginVersion() {Rückkehr (char *) PLUGIN_VERSION;} – Souvik

2

Wenn Ihr Plugin nicht in chrome: // plugins angezeigt wird, schlägt es beim ersten Plugin-Scan fehl. Versuchen Sie, mit dem --debug-plugin-loading Flag zu laufen, das Ihnen eine Protokollanweisung an der Stelle geben sollte, an der die Registrierung Ihres Plugins fehlschlägt.

+0

Vielen Dank. Nachdem ich Google-Chrome mit --debug-plugin-loading gestartet habe, kann ich einige Konsolenprotokolle erhalten. Im Konsolenprotokoll stelle ich fest, dass mein Plugin nicht in der Lage ist, eine andere Bibliothek DBAccessLib zu laden (meine eigene Bibliothek, mit der ich auf die Datenbank zugreife, indem ich mich an sqlite3 anbinde). und es gibt Fehler: undefined Symbol: sqlite3_sprintf), Überspringen. Möglicherweise ist Google Chrome nicht in der Lage, libsqlite3-Bibliothek zu finden. – Souvik

Verwandte Themen