Firefox 未检测到 NPAPI 插件

Posted

技术标签:

【中文标题】Firefox 未检测到 NPAPI 插件【英文标题】:NPAPI plugin not detected by Firefox 【发布时间】:2012-11-19 12:53:07 【问题描述】:

我正在尝试让 Firefox(Windows 7 x64 Professional 下的 16.0.2)检测空白 NPAPI 插件。这是我的代码。

nplithium.def

LIBRARY    nplithium

EXPORTS
    NP_GetEntryPoints     @1
    NP_Initialize         @2
    NP_Shutdown           @3

nplithium.rc

// Microsoft Visual C++ generated resource script.
//
#include "resource.h"

#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"

/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS

/////////////////////////////////////////////////////////////////////////////
// English (United States) resources

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US

/////////////////////////////////////////////////////////////////////////////
//
// Version
//

VS_VERSION_INFO VERSIONINFO
 FILEVERSION 1,0,0,1
 PRODUCTVERSION 1,0,0,1
 FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
 FILEFLAGS 0x1L
#else
 FILEFLAGS 0x0L
#endif
 FILEOS 0x40004L
 FILETYPE 0x2L
 FILESUBTYPE 0x0L
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904b0"
        BEGIN
            VALUE "CompanyName", "Antek SRL"
            VALUE "FileDescription", "Example Lithium"
            VALUE "FileVersion", "1.0.0.2"
            VALUE "InternalName", "nplithium"
            VALUE "LegalCopyright", "Copyright (C) Marco Buzzanca 2012"
            VALUE "MIMEType", "application/x-lithium"
            VALUE "OriginalFilename", "nplithium.dll"
            VALUE "ProductName", "lithium"
            VALUE "ProductVersion", "1.0.0.1"
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x409, 1200
    END
END

#endif    // English (United States) resources
/////////////////////////////////////////////////////////////////////////////



#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//

dll_entry.cpp

#include "npapi.h"
#include "npfunctions.h"

extern "C" 

    NPError OSCALL NP_GetEntryPoints(NPPluginFuncs* functions) 
    
        if(functions == NULL)
            return NPERR_INVALID_FUNCTABLE_ERROR;

        if(functions->size < sizeof(NPPluginFuncs))
            return NPERR_INVALID_FUNCTABLE_ERROR;

        functions->version       = (NP_VERSION_MAJOR << 8) | NP_VERSION_MINOR;
        functions->newp          = NULL;
        functions->destroy       = NULL;
        functions->setwindow     = NULL;
        functions->newstream     = NULL;
        functions->destroystream = NULL;
        functions->asfile        = NULL;
        functions->writeready    = NULL;
        functions->write         = NULL;
        functions->print         = NULL;
        functions->event         = NULL;
        functions->urlnotify     = NULL;
        functions->getvalue      = NULL;
        functions->setvalue      = NULL;
        functions->javaClass     = NULL;

        return NPERR_NO_ERROR;
    

    NPError OSCALL NP_Initialize(NPNetscapeFuncs* functions)
    
        return NPERR_NO_ERROR;
    

    NPError OSCALL NP_Shutdown() 
    
        return NPERR_NO_ERROR;
    

不幸的是,我在网上找到的所有示例插件和教程要么已过时,要么不完整。 MDN 也无济于事,因为它几乎没有提供关于浏览器期望这些函数做什么的信息(NP_GetEntryPoints 完全没有文档记录)。

我有什么遗漏吗?我不是想让插件做任何事情,我只是想让 firefox 检测到它。

【问题讨论】:

【参考方案1】:

我设法让 Firefox 检测到我的插件。

如plug-in developement overview中指定:

为此插件DLL的嵌入资源的版本标记 应包含以下一组字符串/值对:

MIMEType:用于 MIME 类型 FileExtents:用于文件扩展名 FileOpenName:用于文件打开模板 ProductName:插件名称 文件描述:用于描述 语言:用于使用的语言

我的 .rc 文件中缺少一些这样的对。

【讨论】:

以上是关于Firefox 未检测到 NPAPI 插件的主要内容,如果未能解决你的问题,请参考以下文章

Firefox [npapi] 插件开发 - 调用方法时 Firefox 冻结

从 Firefox 扩展调用 NPAPI 插件功能

QWebkit无法检测NPAPI插件

Firefox 实例化 NPAPI 插件时崩溃

仅使用 Firefox Addon SDK 在后台嵌入 NPAPI 插件

Flash / Java Applet 的 NPAPI 插件的替代品