webkit插件
来源:互联网 发布:怎样淘宝刷好评挣钱 编辑:程序博客网 时间:2024/05/17 13:45
1. 插件
WebKit插件在和引擎交互时,主要涉及到两个接口:
插件=>引擎:NPNetscapeFuncs
引擎=>插件:NPPluginFuncs
其中,插件到引擎的接口WebKit已经实现了。插件要做的事情就是实现引擎=>插件的接口。
typedef struct _NPPluginFuncs {
uint16_t size;
uint16_tversion;
NPP_NewUPPnewp;
NPP_DestroyUPPdestroy;
NPP_SetWindowUPP setwindow;
NPP_NewStreamUPP newstream;
NPP_DestroyStreamUPP destroystream;
NPP_StreamAsFileUPPasfile;
NPP_WriteReadyUPP writeready;
NPP_WriteUPPwrite;
NPP_PrintUPPprint;
NPP_HandleEventUPP event;
NPP_URLNotifyUPP urlnotify;
// The type ofthis used to be JRIGlobalRef, which was a void *.
// Use void *here directly now that we don't expose any Java
// specificthings in the plugin API.
void*javaClass;
NPP_GetValueUPPgetvalue;
NPP_SetValueUPPsetvalue;
} NPPluginFuncs;
本文将参考Android的插件例子来进行讲解插件的基本原理。
2. AndroidWebKit插件
接口的初始化:
NPNetscapeFuncs的初始化:
initializeExtraBrowserFuncs
事件处理:
HTMLPlugInElement::defaultEventHandler
PluginView::handleEvent
PluginView::handleTouchEvent
PluginWidgetAndroid::sendEvent
NPPluginFuncs::event
进入具体插件的NPP_HandleEvent
创建Surface:
PluginView::setFrameRect
PluginView::setNPWindowIfNeeded
PluginWidgetAndroid::setWindow
PluginWidgetAndroid::layoutSurface
NPPluginFuncs::getvalue,kJavaSurface_ANPGetValue
进入插件NPP_GetValue
所谓Surface,其实就是一块内存区域。对于BackgroundPlugin,就是继承自TextView。
也有可能是SurfaceView的子类,取决于具体应用情境。
设置窗口并刷新:
PluginView::setParent|PluginView::paint
PluginView::updatePluginWidget|PluginView::setFrameRect
PluginView::setNPWindowIfNeeded(!!!)
m_plugin->pluginFuncs()->setwindow
NPP_SetWindow(NPPluginFuncs::setwindow)
NPNetscapeFuncs::invalidaterect
NPN_InvalidateRect
PluginView::invalidateRect
刷新界面:
PluginView::invalidateRect
PluginWidgetAndroid::inval
WebViewCore::invalPlugin
WebViewCore::pluginInvalTimerFired
WebViewCore::drawPlugins
PluginWidgetAndroid::draw,发出kDraw_ANPEventType事件,
NPPluginFuncs::event
插件的加载:
HTMLObjectElement::attach
HTMLPlugInElement::updateWidgetCallback
HTMLObjectElement::updateWidget|HTMLEmbedElement::updateWidget|FrameView::updateWidgets|
RenderEmbeddedObject::updateWidget
FrameLoader::requestObject
FrameLoader::loadPlugin
FrameLoaderClientAndroid::createPlugin
PluginView::create
PluginView::platformInit
PluginView::PluginView
PluginView::platformInit
{
setPlatformWidget(newPluginViewBridgeAndroid());
newPluginWidgetAndroid
}
- webkit插件
- WebKit插件分析
- WebKit实现Chrome插件
- Webkit之插件扩展
- WebKit之NPAPI插件
- QT的Webkit 编写插件
- Android WebKit插件的基本结构
- webkit插件[转自邓大侠]
- webkit加载flash 10.3插件跟踪过程
- QT Webkit的插件Plugin设计实现
- webkit浏览器捕获touch gestures的插件
- Qt Webkit中浏览器插件设计实现
- QT Webkit的插件Plugin设计实现
- webkit加载flash 10.3插件跟踪过程
- Webkit插件实现的基本流程
- Qt Webkit中浏览器插件设计实现
- 为QT的Webkit 编写插件
- Qt Webkit中浏览器插件设计实现
- NAT 介绍
- xz 解压缩
- 努力转行当码农
- 9i新特点:SPFILE的使用
- DLL 与Lib
- webkit插件
- .def 与dll.h
- IOS编译错误:ld: symbol(s) not found collect2: ld returned 1 exit status
- 禁止TeamViewer6退出后弹出页面
- (书摘:用户故事与敏捷方法)第十二章 故事不是什么
- 程序动态创建nine patch图
- 图片ocr(光学字符识别) 仅包含16进制字符的源代码
- 三思而后行
- delphi 关机 重新启动 注销 Windows