android浏览器插件
总结
初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf
androidæµ?è?ˆå??æ??ä??å??ç??
å?šäº†ä??æ?µæ??é??çš„WebKitå,?å??ï,Œå??æ?,å?ˆç ?ç??了ä??ä?‹WebKit
çš„æ??ä??ï,Œä,†ä??ç›?æ??有æ??é??æ??ç??ä??ä?‹ï,Œç??åœ?ç?ˆäº?有ç‚?æ??é??å??ä?,æ??ç?†ä??ä?‹äº†ï,Œä?Ÿå?Œæœ›èƒ,è?Ÿå,?å??å,šå,šäº,æµ?
é??å…ˆè??è??æ??ä??ä?‹ä??ä?ˆæ??WebKitæ??ä??ï,ŒWebKitæ??ä??å??æ??内æ ?æ??WebKitçš„æµ?è?ˆå??çš„æ??ä??ï,ŒIEçš„ä??çŸ,é??ï,Œä,†firefoxçš„æ??ä??åº?è?,ä??
WebKitæ??ä??ç??ä,,ï,Œå› ä?ºWebKitæ??ä??ä,?ç??çš„ä??è??ä??ä?ªæŠ?æœ?æˆ?è?…è??æ?,å??å??å?šNPAPIï,Œè?Œè??å,?æ?,å ?åœ?mozillaçš„ç,?ç??ä?Š
é??有è??ç?†çš„ä?‹ç??ï,Œå?„ä,?有å…?è??å??ä?,å??mozilla看看ã?‚å›?è?‡å,?æ?,ï,Œå?,å??æµ?è?ˆå??æ??ä??å??ï,Ÿæˆ?è?…è??ä?ºå?,è??有è??ä?
ˆä?ªä?œè,?å??åœ?ï,Ÿæˆ?çš„ç?†è??æ??ä?ºäº†æ‰?å??æµ?è?ˆå??的功èƒ,ï,Œå,?å??çŸ,é??ï,Œæµ?è?ˆå??的功èƒ,ä??è??æ??æ??æŸ?ç,?é?µï,Œç,?é?µä?
?è??æ??ç??htmlï,Œjavascriptï,Œcssç?„æˆ?ï,Œå??å,?è??包æ‹?ä??些资
æº æ?‡ä??ï,Œå?‚æ?œå?ªæ??æ??æŸ?ç,?é?µï,Œæµ?è?ˆå??ä??èˆ?å,Ÿç??了ï,Œä,†éš?ç??ç,?é?µå†…å??çš„ä??æ??å,šæ ?åŒ?ï,Œå,?æ?‚åŒ?ï,Œæ??å?‚å,šåª?
ä,?æ?‡ä??çš„æ??æ??ï,Œæµ è?ˆå??å??ç??ä??èƒ,æ??ä?›è??些功èƒ,了ï,Œäº?æ??æ??ä??å??出ç??了ï,Œå…?ä??æœ?有ä??è??æ??çš„å??æ??flash了ã?‚
æ??ä??çš„åŠ è,,è?‡ç?‹ç??å??çš„è??å??æ??ï,š
æµ?è?ˆå??åœ?è??æ??ç,?é?µçš„æ??å??ï,Œå??ç??æŸ?ä?ªèŠ‚ç‚?å??æ??了æŸ?ä?ªMIMEç??å?‹
æ ?æ??è??ä?ªMIMEç??å?‹æŸ,æ‰?æ??册è?‡çš„æ??ä??ï,Œæ‰?åˆ?了å??åŠ è?
?è??æ??ä??
å…?ä,?çš„è??ï,Œåœ?Androidä?Šé??è??ä?ªè?‡ç?‹å?‚ä?‹ï,š
å,?å??ç??ç,?é?µä?Šå??åœ?object节ç‚?çš„æ??å??ï,ŒWebKitå?†è?›å…,åŠ
è??plug-inçš„æµ?ç?‹
æŸ,æ‰?æ‰?有Intentç??å?‹ä?ºPLUGIN_ACTIONçš„serviceï,Œè??å›?æ‰?有serviceçš„æ??ä??libè??å?„ï,Œå,?å?‚/data/data/com.android.sampleplugin/libï,ˆæ??ï,šå??èƒ,è??ä,šæ?œç??/system/lib/ä?‹é??çš„soï,‰
é??å?†å?„ä?ªç›?å,?ä??çš„åŠ?æ??åº?.soæ?‡ä??ï,Œé?šè?‡é?„å…ˆå?šä?‰çš„
entryPointè??æ??出æ??ä??çš„ä??æ??ï,ŒåŒ…æ‹?å??å??ï,Œæ??è??ï,Œmimeç
??å?‹ç?‰ï,Œå??ä??å??è??些ä??æ??
æ??ä?ªWebViewåœ?layoutçš„æ??å??ä,šåˆ›å?ºplug-inï,Œåœ?è??ä?ªè?‡ç?‹ä
?,æ ?æ??mimeç??å?‹ç?‰åˆ›å?ºPluginViewï,ˆæ??ä??è?†å›?ï,Ÿï,‰
æ?,ç??ä,šå?ºç?‹PluginPackageï,Œå?ºç?‹çš„è?‡ç?‹ä??ä,šè?ƒç??NP_Initializeï,Œå?Œæˆ?Pluginçš„åˆ?å?‹åŒ?å?,ä,œ
æ??ï,šåœ?3ä??å?ºç?‹PluginViewçš„æ??å??ä,šæ‰?åˆ?å??åº?mimeç??å?‹çš„PluginPackageï,ˆmimeå?ŒPluginPackageä??ä??å??åº?ï,‰ï,Œè??æ ?åœ?
PluginViewçš„start里é??ä,šåˆ?ç??PluginPackageçš„æ?,å??è?ƒç??NPP_Newï,Œåˆ›å?ºpluginçš„å??ä?‹ï,ˆä??ä?ªPluginViewå?Œä??ä?ªpluginçš„å??ä?‹ä??ä??å??åº?ï,‰ï,Œå??ä??å?Œæ??创å?ºä??ä?ªå??åº?çš„NPObjectçš„å??ä?‹ï,Œè??å,?åœ?NPPçš„pdata里é??ï,ˆä??ä?ªpluginçš„å??ä?‹å??åº?ä??ä?ª NPObjectçš„å??ä?‹ï,‰
åœ?Androidå??å??å,?å??æ??ä??ï,Œä?‹é??è??4ä?ªå‡,æ??æ??å?…é??å??ç??çš„ï,š
NPError NP_Initialize(NPNetscapeFuncs* browserFuncs, NPPluginFuncs* pluginFuncs, void *java_env);
NPError NP_GetValue(NPP instance, NPPVariable variable, void *value);
const char* NP_GetMIMEDescription(void);
void NP_Shutdown(void);
æ??ï,šè??ä?ªåœ?ä??å?Œçš„å??å??ä?‹é??有区åˆ?ï,Œæˆ?å??ç??åœ?mac osä?Šé??éœ?è??å??ç??
NPError NP_Initialize(NPNetscapeFuncs *browserFuncs);
NPError NP_GetEntryPoints(NPPluginFuncs *pluginFuncs);
void NP_Shutdown(void);
è??3ä?ªå‡,æ??ï,Œæ??è?ƒä??ä?‹å?‚æ??å??çŸ,é??ï,ŒAndroidä?‹é??çš„
NP_Initialize
包æ‹?了mac osä??çš„
NP_Initialize
�
NP_GetEntryPoints
的功èƒ,ï,Œé? å??çš„java_envæ??å?†javaè?šæ‹Ÿæœºç??å?ƒä, ä?‹æ?,ï,Œä,œä?ºjniå?‚çš„contextï,Œè??ä?ªæ??Androidå?…é??è??çš„ï,Œä, 懂的
ä,†mac osä?ºå?,ä??éœ?è??å??ç??
NP_GetMIMEDescription
å??ï,Ÿå??ï,Œè??ä?ªä?ºæ??å??æ??ç??ï,Œæœ‰è??有å…?è??çš„å??ä?,å??ç ?ç??ä??ä?‹
ä?‹é??看看
const char* NP_GetMIMEDescription(void);
æ??å?‚è??å›?ï,š application/x-yourname:tst:MIME type is application/x-yourname
å??ä?,å?‚è?ƒè??里ã?‚
æ?,ç??看看
NP_Initialize
æ??è?ƒé‡?è??ï,Œé?šè?‡browserFuncså?†æµ?è?ˆå??çš„æ?,å??ä, ç??æ??ä??ï,Œé?šè?‡pluginFuncså??åˆ?æ??ä??çš„æ?,å??ï,Œjava_envä?Šé??æ??è?‡äº
†
é??é??ï,šä?ºå?,ç??è??ç?•æ??å??å?†æ?,å??ä, ç??æ??ä??å??ï,Ÿ
ä??èˆ?æ?,è??ï,Œå…?å?ƒæ??å ?çš„æ?,å??ï,Œæˆ?ä??ä,šç›?æ?,å??æ??å‡,æ??çš„ï,Œè??ä,?ç??å?ƒï,ŒåŒ…å??å,?æ?‡ä??ï,Œåº?æ?‡ä??å??å??ä?,ç›?æ?,è?ƒç??了ï,Œä,†è??里有ä?ªé??é??ï,Œæˆ?ä??å,?å??çš„æ??æ??ä??ï,Œæ??ç??æµ?è?ˆå??ç??çš„ï,Œè?Œä??æ??ç›?æ?,è?ƒç??æµ?è?ˆå??ã?‚ä??è??æ??ä?Šè??æ??å??èƒ,æ›?æ?…æ,šä??些ï,Œåœ?Androidä?Šé??è??些æ??ä??éƒ,æ??appï,Œå??包å??åŠ?æ??åº?.soæ?‡ä??ï,ŒæŒ‰ç…?ä??èˆ?çš„è?ƒç??æ??å??ï,Œå?†æ?
ç,ºæ‰?ä??åˆ?è??些æ?,å??çš„å??ç??ï,Œæ??çš„ï,Œç??å‡,æ??指é?ˆå?†è??å†?è??ä?ªé??é??ï,Œåœ?æ??ä??ä??è??é??æµ?è?ˆå??çš„æ?,å??éƒ,æ??é?šè?
‡å‡,æ??指é?ˆå??ç??çš„ï,Œæ„Ÿè?‰æœ‰ç‚?ç??ä,,C++ä??çš„è?šå‡,æ??ï,Œä?‡èƒ,的指é?ˆï,ŒCçš„ç?µé?‚å?Š
é??é??ï,šé‚?ä?ºå?,æ??ä??çš„æ?,å??ä, ç??æµ?è?ˆå??ä?Ÿè??ç??è??ç??æ??
å??å??ï,Ÿ
å??å?Šï,Œæ??ç„?è?ƒç??æ??ä??æµ?è?ˆå??åˆ?æ??ä??çš„ï,Œé‚?æ??ä??ç›?æ?,æ??ä?›å,?æ?‡ä??ï,Œæµ?è?ˆå??ç›?æ?,è?ƒç??ä??å??å,,了ï,Œä?ºå?,å?ˆè??ç??å‡,æ??指é?ˆï,Ÿè??ä?ªæˆ?ä?Ÿæ??æ??æ??ç?,ï,Œè?Œä,,ç??ç›?æ?,è?ƒç??çš„æ??å??ä?Ÿæ??å??è?Œçš„ï,Œæ??å?‚æˆ?ä??åœ?è??è?ºçš„è??4ä?ªå‡,æ??å??æ??ä??æµ?è?ˆå??ç›?æ?,è?ƒç??æ??ä??çš„ï,Œä??çŸ,é??å,?å??有æ??有åˆ?çš„ç??æ?ˆã?‚
ä?‹é??分æ??ä??ä?‹å?‚æ??browserFuncsï,Œåœ?npfunctions.hä??å?šä?‰çš„ï,š
typedef struct _NPNetscapeFuncs {
uint16 size;
uint16 version;
NPN_GetURLProcPtr geturl;
NPN_PostURLProcPtr posturl;
NPN_RequestReadProcPtr requestread;
NPN_NewStreamProcPtr newstream;
NPN_WriteProcPtr write;
NPN_DestroyStreamProcPtr destroystream;
NPN_StatusProcPtr status;
NPN_UserAgentProcPtr uagent;
NPN_MemAllocProcPtr memalloc;
NPN_MemFreeProcPtr memfree;
NPN_MemFlushProcPtr memflush;
NPN_ReloadPluginsProcPtr reloadplugins;
NPN_GetJavaEnvProcPtr getJavaEnv;
NPN_GetJavaPeerProcPtr getJavaPeer;
NPN_GetURLNotifyProcPtr geturlnotify;
NPN_PostURLNotifyProcPtr posturlnotify;
NPN_GetValueProcPtr getvalue;
NPN_SetValueProcPtr setvalue;
NPN_InvalidateRectProcPtr invalidaterect;
NPN_InvalidateRegionProcPtr invalidateregion;
NPN_ForceRedrawProcPtr forceredraw;
NPN_GetStringIdentifierProcPtr getstringidentifier;
NPN_GetStringIdentifiersProcPtr getstringidentifiers;
NPN_GetIntIdentifierProcPtr getintidentifier;
NPN_IdentifierIsStringProcPtr identifierisstring;
NPN_UTF8FromIdentifierProcPtr utf8fromidentifier;
NPN_IntFromIdentifierProcPtr intfromidentifier;
NPN_CreateObjectProcPtr createobject;
NPN_RetainObjectProcPtr retainobject;
NPN_ReleaseObjectProcPtr releaseobject;
NPN_InvokeProcPtr invoke;
NPN_InvokeDefaultProcPtr invokeDefault;
NPN_EvaluateProcPtr evaluate;
NPN_GetPropertyProcPtr getproperty;
NPN_SetPropertyProcPtr setproperty;
NPN_RemovePropertyProcPtr removeproperty;
NPN_HasPropertyProcPtr hasproperty;
NPN_HasMethodProcPtr hasmethod;
NPN_ReleaseVariantValueProcPtr releasevariantvalue;
NPN_SetExceptionProcPtr setexception;
NPN_PushPopupsEnabledStateProcPtr pushpopupsenabledstate;
NPN_PopPopupsEnabledStateProcPtr poppopupsenabledstate;
NPN_EnumerateProcPtr enumerate;
NPN_PluginThreadAsyncCallProcPtr pluginthreadasynccall;
NPN_ConstructProcPtr construct;
NPN_GetValueForURLProcPtr getvalueforurl;
NPN_SetValueForURLProcPtr setvalueforurl;
NPN_GetAuthenticationInfoProcPtr getauthenticationinfo;
NPN_ScheduleTimerProcPtr scheduletimer;
NPN_UnscheduleTimerProcPtr unscheduletimer;
NPN_PopUpContextMenuProcPtr popupcontextmenu;
NPN_ConvertPointProcPtr convertpoint;
} NPNetscapeFuncs;
有è?…è?‡50ä?ªå‡,æ??ã?‚ã?‚ã?‚ã?‚ã?‚æˆ?æ??æ‰?åˆ?è??ç?†çš„è??æ??æ?‡æ
??ï,Œé‚?å??ä?,å??ç??åˆ?了å†?ç ?ç??å??ï,Œæœ‰ä?ªæ?‚å?µï,Œé‡Œé??æ??ä?›äº†æµ?è?ˆå??ç??çš„å?„ç??æ?,å??ï,Œæ??ä?›ç??æ??ä??ä,?ç??ã?‚
ä?‹é??æ??pluginFuncsçš„ï,š
typedef struct _NPPluginFuncs {
uint16 size;
uint16 version;
NPP_NewProcPtr newp;
NPP_DestroyProcPtr destroy;
NPP_SetWindowProcPtr setwindow;
NPP_NewStreamProcPtr newstream;
NPP_DestroyStreamProcPtr destroystream;
NPP_StreamAsFileProcPtr asfile;
NPP_WriteReadyProcPtr writeready;
NPP_WriteProcPtr write;
NPP_PrintProcPtr print;
NPP_HandleEventProcPtr event;
NPP_URLNotifyProcPtr urlnotify;
JRIGlobalRef javaClass;
NPP_GetValueProcPtr getvalue;
NPP_SetValueProcPtr setvalue;
} NPPluginFuncs;
è??ä?ªå?ªæœ‰13ä?ªå‡,æ??ï,Œæ??è?ƒå,,看å?ˆï,Œæˆ?ä?Ÿæ??æ‰?åˆ?è??ç?†çš„è??æ??æ?‡æ??ã?‚ã?‚ã?‚ã?‚ä,†çœ‹å •å,?å,?æ?‚å??ä?,猜出ä,œç??ï,Œè
??些éƒ,æ??æ??ä??æ??ä?›ç??æµ?è?ˆå??çš„å›?è?ƒï,Œæµ?è?ˆå??ä,šåœ?éœ?è
??çš„æ??å??è?ƒç??å?ƒä??ï,Œæ??å?‚创å?ºæ??ä??çš„æ??å??è?ƒç??NPP_NewProcPtrï,Œé??æ??çš„æ??å??è?ƒç??NPP_DestroyProcPtrç?‰ã?‚
åœ?è??里ï,ŒAndroidä?ºæˆ?ä??æ??ä?›äº†ä??å,?æ?,å??ï,Œæ‰?å??了æµ?è?
ˆå??ç??çš„æ?,å??ï,Œå?šä?‰åœ?Android_npapi.hä??ï,š
#define kLogInterfaceV0_ANPGetValue ((NPNVariable)1000)
#define kAudioTrackInterfaceV0_ANPGetValue ((NPNVariable)1001)
#define kCanvasInterfaceV0_ANPGetValue ((NPNVariable)1002)
#define kMatrixInterfaceV0_ANPGetValue ((NPNVariable)1003)
#define kPaintInterfaceV0_ANPGetValue ((NPNVariable)1004)
#define kPathInterfaceV0_ANPGetValue ((NPNVariable)1005)
#define kTypefaceInterfaceV0_ANPGetValue ((NPNVariable)1006)
#define kWindowInterfaceV0_ANPGetValue ((NPNVariable)1007)
#define kBitmapInterfaceV0_ANPGetValue ((NPNVariable)1008)
#define kSurfaceInterfaceV0_ANPGetValue ((NPNVariable)1009)
#define kSystemInterfaceV0_ANPGetValue ((NPNVariable)1010)
#define kEventInterfaceV0_ANPGetValue ((NPNVariable)1011)
#define kSupportedDrawingModel_ANPGetValue ((NPNVariable)2000)
#define kJavaContext_ANPGetValue ((NPNVariable)2001)
ä?Šé??åˆ?出的æ??ANPGetValueä,?ç??åˆ?çš„ç??å?‹å?‚æ??ï,Œåˆ†åˆ?å??ä??å??åˆ?ç›?å…?çš„æ?,å??ï,Œæ??å?‚Logï,Œæ??æ??éŸ?é??ï,Œç??å›?ï,Œæ??åˆ?è?†å›?ï,Œå??åˆ?å,?å‰?Contextç?‰ç?‰ï,Œè??些æ?,å??çš„å??ç??éƒ,æ??ç??WebKitå,?æ??å?šçš„ï,Œå…?ä??有ä?ªANPEventInterfaceV0ï,Œpost事ä??ä,šåœ?
NPP_HandleEventProcPträ?,å??åˆ?ï,Œç›?å,?äº?å,?æ??æ??ä?›çš„ä??ä?ªæ?
ˆæ??分å??ä??å?ƒï,Œè??里è?Ÿè??分å??å?„ç??ç??ç?Ÿæ?ˆæ??ï,ŒåŒ…æ‹?é,
æ ‡ï,Œé??ç›?ï,Œè??æ??ï,Œç??åˆ?ç?‰ï,Œç??æˆ?ä?Ÿå??ä?,自å?šä?‰æ?ˆæ??ï,Œå…?ä,?è??å?‚è?ƒandroid_npapi.hï,Œè??里的æ?ˆæ??å?†å??é??ç??å…
?ä,?çš„æ??ä??ï,Œå??é??å?†ä?‹ç??å…?ä,?çš„æ??ä??æ??æ??ä?ˆç?Ÿæˆ?çš„
æ??æ„?ä??ä?‹ä?Šé??æ?,å??çš„NPXå‰?ç,?ï,ŒNPNè??ç,ºæµ?è?ˆå??ç??çš„æ?,å??ï,ˆNetscape-Plugin-Netscapeï,Ÿï,‰ï,Œè?ŒNPPè??ç,ºæ??ä??ç??çš„æ?,å??ï,ˆNetscape-Plugin-Pluginï,Ÿï,‰ï,Œé‚?æœ?å,?å?‹çš„NPæ?,å??å??ï,Ÿå??ï,Œä??æ?…æ,šï,Œå??èƒ,å?ªæ??ä?ºäº†å?Œè??ä?,ç??区åˆ?å,?æ?,
OKï,Œåˆ?了è??里ï,Œæµ?è?ˆå??é?šè?‡MIMEæ‰?åˆ?了æ??ä??ï,Œé?šè?‡å‡,æ??指é?ˆï,Œå?Šè?‰äº†æ??ä??ï,Œæˆ?æµ?è?ˆå??æ??ä?›çš„æ?,å??ï,Œä?Ÿå??
åˆ?了æ??ä??æ??ä?›çš„æ?,å??ï,Œé?ºä??ä?ŸæŠŠjavaç??å?ƒContextä, ç??ä
º†æ??ä??ã?‚
ä,†åˆ?å?‹åŒ?æ??ä??ä?,å??ï,ˆNP_Initializeï,‰ï,ŒWebKitå?†å??ä?‹åŒ?æ
?ä??ï,Œè?ƒç??ï,š
NPError NPP_New(NPMIMEType pluginType, NPP instance, uint16 mode, int16 argc,
char* argn[], char* argv[], NPSavedData* saved);
æ‰?ä?,ä?Šä??节æ??åˆ?çš„NPå‰?ç,?ï,Œæˆ?è?,ä?ºå??ä?,ç?†è??æˆ?ç??å‡,æ??ï,Œè?ŒNPPå‰?ç,?ç›?å,?äº?å??ä?‹å‡,æ??了ï,Œè??里的NPPï,Œå??å??ä?,看æˆ?æ??this指é?ˆï,Œæˆ?è?…C里é??çš„å??æ??Handle了ï,Œçœ‹NPPçš
„å?šä?‰ï,š
typedef struct _NPP
{
void* pdata; /* plug-in private data */
void* ndata; /* netscape private data */
} NPP_t;
typedef NPP_t* NPP;
ä?Ÿè??å??了è??ä??ç‚?ï,Œå??äº?å?ƒå??æ??ç??å??çš„ä,?ç??å?ƒçš„pdataæ
?ä? é??å?‚æ??å??
å…ˆæ?,看看NPP_New里é??çš„å??ç??ï,š
instance- pdata = browser- createobject (instance, getPluginClass());
å…?ä??browseræ??剕é ?åˆ?å?‹åŒ?çš„æ??å??ä, è?‡æ?,çš„æµ?è?ˆå??æ?,å?
?ï,Œåˆ?ç??å?ƒæ?,å??ä?‹åŒ?æ??ä??ï,ŒgetPluginClassæ??å??å?›çš„ï,Ÿ
è??里的getpluginClassè??å›?NPClass指é?ˆï,Œå…?ä??å?šä?‰äº†æ??ä??çš„ä??ç??åˆ?å‡,æ??指é?ˆï,ˆå?ˆæ??å‡,æ??指é?ˆã?‚ã?‚ã?‚ã?‚ï,‰ï,Œä?‹é??æ??ä??ä?ªå??ç??çš„ä?‹å??ï,š
static NPClass pluginClass = {
NP_CLASS_STRUCT_VERSION,
pluginAllocate,
pluginDeallocate,
pluginInvalidate,
pluginHasMethod,
pluginInvoke,
pluginInvokeDefault,
pluginHasProperty,
pluginGetProperty,
pluginSetProperty,
pluginRemoveProperty,
pluginEnumerate
};
è??些å‡,æ??指é?ˆåº?è?,æ??é?„å…ˆå?šä?‰å,,çš„ï,Œé?ºåº?ï,Œä?ªæ??éƒ,è??ä??è??ï,Œç??äº?ä?,å‰?å,?å??è?‡ç›?å…?çš„è??éƒ?分内å??ï,Œæˆ?çŸ,é??è??些æ??æµ?è?ˆå??ç??æ?,æ??ä,œNPObjectçš„æ?,å??ï,Œä??æ„?ä??ä?ªjså??è??ï,Œè?ƒç??å?ƒçš„å??æ??æˆ?è?…æ??æ??ï,Œæœ?ç?ˆéƒ,æ??è?ƒç??åˆ?å??åº?çš„NPObjectä??æ?,çš„ï,Œè??æ ?æ?,看ï,Œè??ä?ªNPObjectä??è??了å
??åº?çš„ä??ä?ªjsçš„å??è??ï,Œæˆ?ä??è??里å??æ??å??åº?了MIMEé‚?ä?ªèŠ‚ç‚?ã?‚
æµ?è?ˆå??çŸ,é??了è??ä?ªNPObjectçš„æ?,å??ï,Œå??ç›?æ?,åˆ?ç??pluginAllocateå?ºç?‹è??ä?ªNPObjectï,Œå›?è?ƒã?‚ã?‚ã?‚å?ˆæ??å›?è?ƒï,Œæ??ä??çš„åœ?ä,?å?ˆä,?çš„ï,Œå?Šè?‰åˆ?人æ??ä?ˆæ ?è?ƒç??自å??ï,Œä,†å?,æ??
å??è??è?ƒä??æ??自å??è??了ç??çš„
å??é?…ä??ï,Œæˆ?ä??创å?ºäº†ä??ä?ªPluginObjectï,Œè??ä?ªç›?å,?äº?æ??æ??ä??è??è??çš„Handleï,Œé‡Œé??ä??å??了å?ˆå,šä?œä?œï,š
typedef struct PluginObject {
NPObject header;
NPP npp;
NPWindow* window;
PluginType pluginType;
SubPlugin* activePlugin;
} PluginObject;
å…?ä??ï,ŒNPObjectï,ŒNPPåœ?pluginAllocateä??赋å?,ï,š
static NPObject *pluginAllocate(NPP npp, NPClass *theClass)
{
PluginObject *newInstance = (PluginObject*) malloc(sizeof(PluginObject));
newInstance- header._class = theClass;
newInstance- header.referenceCount = 1;
if (!identifiersInitialized) {
identifiersInitialized = true;
initializeIdentifiers();
}
newInstance- npp = npp;
return newInstance- header;
}
è??里å??ä?,看åˆ?ï,ŒNPObjectå??æ??NPClassçš„å??è?…ï,Œä??è??了jsçš„å??è??æœ?è??å??æ??ä??ç?„å‡,æ??
NPWindowåœ?å?ªé‡Œèµ‹å?,çš„ï,Ÿè??è??å??NPP_SetWindowå??ï,Œè??ä?ªåº?è?,æ??åœ?æ??ä??è?†å›?创å?ºå,,ä?,å??è?ƒç??çš„ã?‚
å??ï,Œè??æ??有å?Œï,Œç??ç??NPP_Newï,Œçœ‹çœ‹è??3ä?ªå?‚æ??
int16 argc,char* argn[], char* argv[]
ç??ä,,mainå‡,æ??çš„å?‚æ??ï,Œargnå?Œargv分åˆ?ä??è??节ç‚?çš„å??æ??å??å?Œå??æ??å?,ï,Œæˆ?å??HTMLä??æ??å?ˆç†Ÿï,Œä??çŸ,é??æ??ä??æ??å??è??ä?ªï,Œè??æ??å??ç…?测è??ç??çš„HTMLæ?‡ä??æ ?è??释å,,ä??些ï,š
object type= application/x-testbrowserplugin height=200 width=400 id= sample
param name= DrawingModel value= Surface /
param name= PluginType value= Paint /
/object
OKï,Œè??里的argc == 2ï,Œargn[0] == DrawingModel ï,Œargn[1] == Surface ï,Œè??æ ?å,?å??åº?è?,å??æ??ç?,了
æµ?è?ˆå??é?šè?‡HTMLä??æ??ä??çš„å?‚æ??ï,Œè?ƒç??NPP_Newåˆ?å?‹åŒ?æ??ä
??ï,Œå??åˆ?SubPluginå?ŒPluginType
è??里的SubPluginä??è??真æ??çš„æ??ä??å??ä?‹çš„æ?,å??ï,Œå?šä?‰å?‚ä?‹ï,š
class SubPlugin {
public:
SubPlugin(NPP inst) : m_inst(inst) {}
virtual ~SubPlugin() {}
virtual int16 handleEvent(const ANPEvent* evt) = 0;
virtual bool supportsDrawingModel(ANPDrawingModel) = 0;
int getPluginWidth();
int getPluginHeight();
NPP inst() const { return m_inst; }
private:
NPP m_inst;
};
class SurfaceSubPlugin : public SubPlugin {
public:
SurfaceSubPlugin(NPP inst) : SubPlugin(inst) { m_context = NULL; }
virtual ~SurfaceSubPlugin() {}
virtual jobject getSurface() = 0;
virtual bool supportsDrawingModel(ANPDrawingModel);
void setContext(jobject context);
jobject m_context;
};
SubPluginï,Œæ??ä?›å,„ç?†äº‹ä??æ?,å??ï,ŒSurfaceSubPluginç??æ‰?SubPluginï,Œå??åŠ äº†Contextï,Œç??ä,œjniç›?å…?çš„è?ƒç??
å??é?…ä??ï,Œæˆ?ä??ç??æ‰?SurfaceSubPluginï,Œå??ç??è??些çº?è?šå‡,æ??ï,Œåˆ›å?ºæˆ?ä??自å??çš„æ??ä??ï,Œè?ŒHandleEvent的事ä??å??æ??å‰?é??è??åˆ?了的åœ?NPP_HandleEventä??ä, å…,çš„
OKï,Œåˆ?ç??åœ?ä?ºæ??ï,Œåˆ?å?‹åŒ?çš„å?,ä,œå?šå?Œäº†ï,ŒåŸºæœ?çš„è?ƒç
??é??è??ï,Œæ?†æ??ä?Ÿæ??å,,了ï,Œå??ä?,å,?å?‹å…?ä,?çš„æ??ä??å??ç??ä
º†ã?‚