PPAPI 插件编写

PPAPI


  1. Download the Native Client SDK
  2. 创建一个vs2013工程:
    • 新建一个Win32项目,类型选DLL
    • 去掉预编译头文件stdafx.h和stdafx.cpp
    • 在项目属性–>配置属性–>C/C++–>预编译头,把预编译头选项的值设置为不使用预编译头。
  3. 将一下代码粘贴到项目中。
#include "ppapi/cpp/instance.h"
#include "ppapi/cpp/module.h"
#include "ppapi/cpp/var.h"

/// The Instance class.  One of these exists for each instance of your NaCl
/// module on the web page.  The browser will ask the Module object to create
/// a new Instance for each occurrence of the  tag that has these
/// attributes:
///     src="hello_tutorial.nmf"
///     type="application/x-pnacl"
/// To communicate with the browser, you must override HandleMessage() to
/// receive messages from the browser, and use PostMessage() to send messages
/// back to the browser.  Note that this interface is asynchronous.
class HelloTutorialInstance : public pp::Instance {
 public:
  /// The constructor creates the plugin-side instance.
  /// @param[in] instance the handle to the browser-side plugin instance.
  explicit HelloTutorialInstance(PP_Instance instance) : pp::Instance(instance)
  {
    pp::Var var_reply = pp::Var("hello from Pepper Plugin");
    PostMessage(var_reply);
  }
  virtual ~HelloTutorialInstance() {}

  /// Handler for messages coming in from the browser via postMessage().  The
  /// @a var_message can contain be any pp:Var type; for example int, string
  /// Array or Dictinary. Please see the pp:Var documentation for more details.
  /// @param[in] var_message The message posted by the browser.
  virtual void HandleMessage(const pp::Var& var_message) {
    // TODO(sdk_user): 1. Make this function handle the incoming message.
  }
};

/// The Module class.  The browser calls the CreateInstance() method to create
/// an instance of your NaCl module on the web page.  The browser creates a new
/// instance for each  tag with type="application/x-pnacl".
class HelloTutorialModule : public pp::Module {
 public:
  HelloTutorialModule() : pp::Module() {}
  virtual ~HelloTutorialModule() {}

  /// Create and return a HelloTutorialInstance object.
  /// @param[in] instance The browser-side instance.
  /// @return the plugin-side instance.
  virtual pp::Instance* CreateInstance(PP_Instance instance) {
    return new HelloTutorialInstance(instance);
  }
};

namespace pp {
/// Factory function called by the browser when the module is first loaded.
/// The browser keeps a singleton of this module.  It calls the
/// CreateInstance() method on the object you return to make instances.  There
/// is one instance per  tag on the page.  This is the main binding
/// point for your NaCl module with the browser.
Module* CreateModule() {
  return new HelloTutorialModule();
}
}  // namespace pp

插入所需头文件路径,库路径以及相关库。在“nacl_sdk\pepper_49…”下。pepper_49中“49”是我安装的版本号。
4. 编译生成dll文件,以下是使用electron测试插件。
5. 测试:
main.js

var app = require('app');
var BrowserWindow = require('browser-window');
var path = require('path')

var mainWindow = null;

app.commandLine.appendSwitch('register-pepper-plugins', path.join(__dirname, 'libppapi_hello.so;application/x-hello'))

app.on('ready', function() {

  mainWindow = new BrowserWindow({
      height: 800,
      width: 1024,
      'web-preferences' : {
        'p

nacl.html


<html>
  
<head>

  <title>hello_tutorialtitle>
  <script type="text/javascript">
    // The 'message' event handler.  This handler is fired when the NaCl module
    // posts a message to the browser by calling PPB_Messaging.PostMessage()
    // (in C) or pp::Instance.PostMessage() (in C++).  This implementation
    // simply displays the content of the message in an alert panel.
    function handleMessage(message_event) {
      alert(message_event.data);
    }
  script>
head>
<body>

  <h1>NaCl C++ Tutorial: Getting Startedh1>
  <p>
    <div id="listener">
      <script type="text/javascript">
        var listener = document.getElementById('listener');
        listener.addEventListener('message', handleMessage, true);
      script>

      <embed id="hello_tutorial"
             width=0 height=0
             type="application/x-hello" />
    div>
  p>
body>
html>

package.json

{
  "main": "main.js",
  "name": "Pepper plugin test",
  "description": "testing third party plugin load",
  "version": "0.0.1",
  "license": "MIT"
}

使用electron启动相关应用后可以看到,页面启动后弹出提示框。
PPAPI 插件编写_第1张图片

你可能感兴趣的:(ppapi)