参考:

浏览器插件(Plugins)开发 - II

http://wen-bing.github.io/blog/2013-04-24/NPAPI-plugin-intro-2/

无窗口型(Windowless)

无窗口型插件的绘制实际上就是离屏渲染的概念。 浏览器在调用NPP_SetWindow方法时给插件传了一个Drawable,插件只能在浏览器指定的Drawable上显示自己。不同平台这个Drawable不一样。Windows下是HDC,Linux下是X11的Drawable(Pixmap), Mac下是CoreGraphics的context。而具体的绘制过程,则还是有浏览器来控制,当浏览器知道插件需要被重新绘制了,它会调用插件端的API: NPP_HandleEvent,然插件绘制自己。 在API NPP_HandleEvent中浏览器会传递一个event对象:NPEvent,它可以表示不同的事件,包括paint。

当然插件也可以通知浏览器,我需要重绘了。这个时候插件可以调用浏览器的API:NPN_InvalidateRect。当插件调用了NPN_InvalidateRect之后,浏览器会在合适的时候(不是立即)调用插件的NPP_HandleEvent来重绘。虽然NPAPI也提供了一个NPN_ForceRedraw的API,但是很多浏览器没有实现这个API,可能是因为这个API的杀伤力太大了吧。

到现在为止,我们就可以用NPAPI创建一个插件,并且让浏览器能加载我们的插件,还能显示我们自己的内容。当然要实现一个想Flash Player这样的插件,还是有很多工作要做的。

例子

下面的链接提供了一个很好的例子: https://code.google.com/p/npapi-chrome-plugin-simple-http/

Windowless的更多相关文章

  1. 记一次npapi插件无窗口(windowless )化下的妙巧思路然后解决问题的超爽体验过程

     1:问题 集成第三方的ocx控件,用来做pdf显示和签名.如果用窗口化插件做,很简单,加载ocx到窗口中,再显示到网页即可.但这样有个缺点.就是这个窗口会浮动在网页元素的上面,导致遮挡住网页元素.比 ...

  2. C#使用 DirectX SDK 9做视频播放器 并在视频画线添加文字 VMR9

    视频图像处理系列 索引 VS2013下测试通过. 在百度中搜索关键字“DirectX SDk”,或者进入微软官网https://www.microsoft.com/en-us/download/det ...

  3. Bootstrap modal被sliverlight掩盖。

    Bootstrap中的modal被silverlight遮挡了,解决方案: <object id='xx'....> ... <param name="windowless ...

  4. 网页中插入FLASH(swf文件),并且让Flash不遮挡HTML元素

    一:网页中插入flash代码如下:  当然里面的很多属性可以去掉,根据具体的需求而定.  我们在网页中经常遇到播放flash,要正常播放flash就要用到OBJECT和EMBED这两个标签.鉴于火狐及 ...

  5. Chromium Embedded Framework 中文文档(简介)

    转自:http://www.cnblogs.com/think/archive/2011/10/06/CEF-Introduce.html 简介 Chromium Embedded Framework ...

  6. Html页面插入flash代码

    转自:http://www.educity.cn/jianzhan/402117.html 转自:http://www.cnblogs.com/yxc_fj/articles/1390621.html ...

  7. silverlight嵌套html不能输入中文问题

    1.xaml <UserControl xmlns:SilverlightClient="clr-namespace:SilverlightClient" x:Class=& ...

  8. silverlight 不能输入中文问题

    <param name="Windowless" value="true" />将调用silverlight页面的这句删除掉应该就能解决问题了 1. ...

  9. Silverlight中动画的性能浅析

    Silverlight中提供了StoryBoard实现动画,可是StoryBoard的性能实在不敢恭维,特别是动画很大的时候,计算机的CPU和内存的狂增,如此一来性能实在太差,在默认的动画效果中动画实 ...

随机推荐

  1. CLR、CIL、CTS、CLS、CLI、BCL和FCL,JIT,IL,GC

    如果要想深入学习.NET平台,那么标题中的这些关键字对你来说并不陌生,这些名词构成了.NET庞大的生态系统,为了宏观认识.NET平台,学些.NET架构体系,针对一些常用常用名词的理解是很有必要的,未必 ...

  2. python相关软件安装

    一. python 3 安装 Python官网 在官网下载对应系统的安装包 安装步骤 注意:有的时候安装完后会出现"Disable path length limit"的按钮,如果 ...

  3. @JsonIgnore注解

    注解名称:@JsonIgnore 作用:在实体类向前台返回数据时用来忽略不想传递给前台的属性或接口. Eg:User实体中会有字段password字段,当返回用户信息给前台的时候,当然是不希望将pas ...

  4. mybatis中如何将多个表的查询结果,放入结果集中返回

    1.首先需要将resultMap进行改造,为了避免对其他sql的影响建议另外定义一个resultMapExtral,避免id相同, 2.然后在resultMapExtral中添加其它表的字段,若多个表 ...

  5. k8s 应用优先级,驱逐,波动,动态资源调整

    k8s 应用优先级,驱逐,波动,动态资源调整 应用优先级 Requests 和 Limits 的配置除了表明资源情况和限制资源使用之外,还有一个隐藏的作用:它决定了 Pod 的 QoS 等级. 上一节 ...

  6. yum 异常解决一例

    http://mirrors.cloud.aliyuncs.com/centos/6/os/x86_64/repodata/repomd.xml: [Errno 14] PYCURL ERROR 22 ...

  7. java请求url可以带参数

    /** * * @param urlStr * url * @param content * 提交的参数 * @param encoding * 编码格式 * @return */ public st ...

  8. Integer Inquiry UVA-424(大整数)

    题意分析: 将字符串倒着存入int数组中,每次加完后再取余除去大于10的部分 关键:倒着存入,这样会明显缩短代码量. #include<iostream> #include<cstd ...

  9. js正则验证input输入框有空格时提示直接去除空格

    <input type="text" id="test"/> <input type="button" value=&qu ...

  10. LightOJ - 1311 - Unlucky Bird(相遇问题)

    链接: https://vjudge.net/problem/LightOJ-1311 题意: A bird was flying on a train line, singing and passi ...