2.ppapi 原始语法

2.1 函数语法

相对于 IE、npapi 的 func( ) 函数, 对应到 ppapi 中是 postMessage( ) 或 postMessageAndAwaitResponse( ) 消息函数。
postMessage( )的函数原型是：[object 的 id].postMessage( json 对象), 因为是异步的消息, 所以没有返回值.
postMessageAndAwaitResponse( )的函数原型和 postMessage( ) 相似, 但它是线程阻塞(block)等待的，有返回值.
函数名是大小写敏感的, 函数的参数是一个 javascript 对象, 硕正 ppapi 对这个参数对象的成员是有要求的，并有 3 种兼容的书写方案.
语法一： 对象包含 func、para, 例如：

    var para = {func: 'GetCellData',  para: 'A1'};
    var data = AF.postMessageAndAwaitResponse(para);

语法二： 参数对象是字符串数组, 例如：

    var para = ['GetCellData',  'A1'];
    var data = AF.postMessageAndAwaitResponse(para);

执行的效果和语法一完全一样.
回顾一下前面的 “1.关于 ppapi” 的例子，就是采用了这种写法：

    AF.postMessage(['SetSource', 'reportdata/datacenter.xml']);
    AF.postMessage(['Build', 'report/htmltable4.xml']);

语法三： 参数对象是一个字符串, 以回车符分隔函数名和参数，例如：

    AF.postMessage('SetSource \r\n reportdata/datacenter.xml');
    AF.postMessage('Build \r\n report/htmltable4.xml');

2.2 事件语法

相对于 IE、npapi 的 OnReady、 OnEvent 事件入口, ppapi 只有一个事件入口，即事件侦听回调函数, 通过 addEventListener 绑定插件, 前面已经提到。
回调函数是有一个参数的的， 如前面的 function handleMessage(message), message 是一个 json 对象，里面的 message.data 对象提供了所有您想要的内容。
message.data.name 成员，是事件的类型：

    function handleMessage(message) {
     if(message.data.name == "OnReady") {
      //相当于 IE、npapi 中的 OnReady( )
     }
     else if(message.data.name == "OnEvent") {
      //相当于 IE、npapi 中的 OnEvent( )
     }
    }

message.data 中还有其它成员, 下面的表格是其成员的详细说明.

事件类型 (message.data.name) | message.data 成员名 | 含义
--- | --- | ---
OnReady | (无) | (无)
OnEvent | message.data.event | 事件名, 诸如 "SelChanged"、"Clicked"
message.data.p1 | 相当于 IE、npapi 的 p1 参数
message.data.p2 | 相当于 IE、npapi 的 p2 参数
message.data.p3 | 相当于 IE、npapi 的 p3 参数
message.data.p4 | 相当于 IE、npapi 的 p4 参数