PPAPI 插件编写

    xiaoxiao2021-03-25  89

    PPAPI


    Download the Native Client SDK创建一个vs2013工程: 新建一个Win32项目,类型选DLL去掉预编译头文件stdafx.h和stdafx.cpp在项目属性–>配置属性–>C/C++–>预编译头,把预编译头选项的值设置为不使用预编译头。将一下代码粘贴到项目中。 #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 <embed> 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 <embed> 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 <embed> 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

    <!DOCTYPE html> <html> <!-- Copyright (c) 2013 The Chromium Authors. All rights reserved. Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. --> <head> <title>hello_tutorial</title> <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 Started</h1> <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启动相关应用后可以看到,页面启动后弹出提示框。

    转载请注明原文地址: https://ju.6miu.com/read-21972.html

    最新回复(0)