3.dynaload.js 封装

3.1 常规处理

硕正软件 1.0.107.0 版的 dynaload.js 作了改进, 通过添加 prototype 原型函数、自动生成侦听事件脚本, 使得 ppapi 的书写方法和 IE、npapi 完全一致了。
如下是 dynaload.js 和 ppapi 有关的二处关键段落.
1.为 object 添加 func( ) 函数:

    #56#//让 ppapi 语法兼容 npapi：为 <object> 添加 func( ) 函数
    if($B.ppapi) {
      Object.prototype.func = function(funcname, para) {
        return this.postMessageAndAwaitResponse([funcname, para]);
      }
    }

2.为 object 添加事件侦听、复用页面上的 OnReady( ) 和 OnEvent( ):

    #118#if($B.ppapi) { //为 ppapi 添加事件侦听函数, 在其中直接调用 OnReady、OnEvent, 达到语法和 npapi 兼容的目的
     str += '\n<script>\n' + id + '.addEventListener("message", handleMessage' +id+ ', false);\n'
     str += 'function handleMessage' + id + '(message) {\n if(message.data.name=="OnReady") OnReady("' +id+ '");\n else if(message.data.name=="OnEvent") OnEvent("' +id+ '", message.data.event, message.data.p1, message.data.p2, message.data.p3, message.data.p4); \n }\n';
     str += '</script>';
    }

3.2 和 jQuery, easyUI 潜在的冲突

如果您采用了 jQuery 或 easyUI 框架, 页面有可能会出现如下错误, 导致针对插件的函数无法运行：
因为 jQuery 和 easyUI 都不太建议修改 prototype 原型, 一旦出现这种问题, 建议您做这样的处理:
1.修改 dynaload.js, 把 prototype 处的 js 注释掉, 添加一个 名为 ffunc 的 js 函数:

    #57#//if($B.ppapi) {
    //  Object.prototype.func = function(funcname, para) {
    //      return this.postMessageAndAwaitResponse([funcname, para]);
    //  }
    //}
    function ffunc(af, funcname, para)
    {
     if($B.ppapi)
      return af.postMessageAndAwaitResponse([funcname, para]);
     else
      return af.func(funcname, para);
    }

或者, 你把 dynaload.js 文件删除, 把 dynaload-jQuery.js 改名为 dynaload.js 即可, 因为 dynaload-jQuery.js 就是这个修改版.
再或者, 这 2 文件都不要去动, 修改 html 的 js 引用处为: <script type='text/javascript' src='binary/dynaload-jQuery.js'></script> 即可
2.修改您所有页面的源代码, 把插件的函数调用, 比如:

    AF.func("print", "");

统统修改成这种:

    ffunc(AF, "print", "");