一旦你完毕了PPAPI插件的开发,实际使用时可能会有下列需求:

  • 动态创建PPAPI插件
  • 删除PPAPI插件
  • 改变PPAPI插件的尺寸

实现起来非常easy,从JS里直接訪问DOM(BOM)就可以。以下是一个演示样例HTML文件:

<!DOCTYPE html>
<html>
<!--
Copyright (c) 2016 foruok@微信订阅号“程序视界”(programmer_sight).
All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->
<head>
<style type="text/css"> #pluginContainer
{
padding: 0px;
width: 1220px;
height: 540px;
background-color: gray;
}
</style>
<script type="text/javascript">
function createPlugin() {
var plugin = document.createElement("embed");
plugin.setAttribute("id", "explugin");
plugin.setAttribute("type", "application/x-ppapi-example");
plugin.setAttribute("width", "1200px");
plugin.setAttribute("height", "520px"); var container = document.getElementById("pluginContainer");
container.appendChild(plugin);
}
function deletePlugin(){
var container = document.getElementById("pluginContainer");
var plugins = container.getElementsByTagName("embed");
if(plugins.length >= 1){
container.removeChild(plugins[0]);
}
}
function changeSize() {
var plugin = document.getElementById("examplePlugin");
plugin.setAttribute("width", "600px");
plugin.setAttribute("height", "300px");
}
function restoreSize() {
var plugin = document.getElementById("examplePlugin");
plugin.setAttribute("width", "1200px");
plugin.setAttribute("height", "520px");
}
</script>
<meta charset="UTF-8">
<title>Plugin Test</title>
</head> <body>
<input type="button" value="CreatePPAPI" onclick="createPlugin()"/>
<input type="button" value="ChangeSize" onclick="changeSize()"/>
<input type="button" value="RestoreSize" onclick="restoreSize()"/>
<input type="button" value="DeletePPAPI" onclick="deletePlugin()"/> <div id="pluginContainer">
<!--
<embed id="examplePlugin" type="application/x-ppapi-example" width="1200px" height="520px" />
-->
</div>
</body>
</html>

上面的HTML演示了创建、删除、改变大小几种常见的操作。

须要注意的是,当你删除一个PPAPI插件时,会调用到PPP_Instance的DidDestroy方法,你须要在这里的C++/C代码里删除插件实例,释放对应的资源。比方Graphics 2D。Image Data等。DidDestroy调用后,过一会儿。假设没有其它的插件实例存在。就会接着调用PPP_ShutdownModule。假设有,则不会。

个中逻辑,能够參考理解PPAPI的设计

当你设置embed元素的width和height属性后,PPAPI插件里。PPP_Instance的DidChangeView方法会被调用,你须要在这里依据新尺寸又一次创建相关资源。


就这样吧。

其它參考文章详见我的专栏:【CEF与PPAPI开发】。

PPAPI插件的动态创建、改动、删除的更多相关文章

  1. js动态创建表格,删除行列的小例子

    js动态创建表格,删除行列的实例代码. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &quo ...

  2. WPF 中动态创建和删除控件

    原文:WPF 中动态创建和删除控件 动态创建控件 1.容器控件.RegisterName("Name",要注册的控件)   //注册控件 2.容器控件.FindName(" ...

  3. js动态创建和删除option

    1.动态创建select function createSelect(){           var mySelect = document.createElement("select&q ...

  4. WPF 中动态创建、删除控件,注册控件名字,根据名字查找控件

    动态创建控件 1.容器控件.RegisterName("Name",要注册的控件)   //注册控件 2.容器控件.FindName("Name") as  控 ...

  5. 动态加入改动删除html表格内容

    1.需求 须要实现收银台上加入改动删除商品信息时顾显能够实时看到其变化 2.解决 收银台和顾显通过tcp传输进行数据通信,顾显通过操作html中的表格进行数据加入改动和删除操作 3.代码 mytest ...

  6. spring与quartz整合实现分布式动态创建,删除,改变执行时间定时任务(mysql数据库)

    背景:因为在项目中用到了定时任务,当时想到了spring的quartz,写完发现费了很大功夫,光是整合就花了一上午,其中最大的问题就是版本问题,项目中用的是spring3.2.8的版本,查阅发现,3. ...

  7. 通过JS动态创建和删除HTML元素

    <script type="text/javascript" language="Javascript"> function InputOnBlur ...

  8. Unity3D 中的面向对象设计 {游戏对象(创建、删除、获取),以及添加修改组件}

    一.创建游戏对象 游戏对象分三种:(1) 将物体模型等资源由Project工程面板拖拽到Hierarchy层次面板中 (2) 由GameObject菜单创建Unity自带的游戏对象,如Cube.Cam ...

  9. [转]C# FileSystemWatcher监控指定文件或目录的文件的创建、删除、改动、重命名等活动

    觉得这个很常用..比如一些软件.   http://www.rabbit8.cn/DoNet/407.html   FileSystemWatcher控件主要功能: 监控指定文件或目录的文件的创建.删 ...

随机推荐

  1. 大数据学习——kettle的简单使用

    1 生成随机数保存到本地文件 新建转换--输入--生成随机数--输出--文本文件输出--保存到本地文件 2 在线预览生成结果 3 字段选择 4 增加常量 5 生成多条数据 右键生成随机数--改变开始复 ...

  2. 4003.基于Dijsktra算法的最短路径求解

    基于Dijsktra算法的最短路径求解 发布时间: 2018年11月26日 10:14   时间限制: 1000ms   内存限制: 128M 有趣的最短路...火候欠佳,目前还很难快速盲打出来,需继 ...

  3. log4net配置分析

    appender   附加器 RollingFileAppender      滚动文件appender MaxSizeRollBackups      最大尺寸回滚 ConversionPatter ...

  4. SOAP UI(ReadyAPI)学习——第一步:资源帖

    SoapUI的参数说明:http://www.soapui.org/Working-with-soapUI/preferences.html 进一步了解可以阅读:http://www.51testin ...

  5. python logger日志工具类

    pytest命令行执行默认不会打印log信息,需要加‘-s’参数或者 ‘–capture=no’,即pytest -s #! /usr/bin/env python # coding=gbk impo ...

  6. 模型表单ModleForm

    官方文档网址   http://python.usyiyi.cn/documents/django_182/topics/forms/modelforms.html 模型表单的应用场景 如果你正在构建 ...

  7. windows.open 以post的方式传递参数

    今天看到有篇文章寫到 windows.open 可以post方式傳遞參數,就趕緊照作看看,結果是可行的,感謝撰寫這篇文章的作者~ /** * window.open with post method  ...

  8. 【BZOJ4945&&UOJ317】游戏(2-sat,拓扑序)

    题意: 思路: 输出方案时有一个优秀的性质可以利用: tarjan缩点之后点所属的分量编号是原图的反的拓扑序 所以只需要在两种方案内找到所属分量编号较小的那个就行了,用来满足(i,i')那个限制 #i ...

  9. JVM指令详解(下)

    九.自增减指令 该指令用于对本地(局部)变量进行自增减操作.该指令第一参数为本地变量的编号,第二个参数为自增减的数量. 比如对于代码:                 int d=10; d++; d ...

  10. 标准C程序设计七---57

    Linux应用             编程深入            语言编程 标准C程序设计七---经典C11程序设计    以下内容为阅读:    <标准C程序设计>(第7版) 作者 ...