3.dynaload.js 封装
3.1 常规处理
硕正软件 1.0.107.0 版的 dynaload.js 作了改进, 通过添加 prototype 原型函数、自动生成侦听事件脚本, 使得 ppapi 的书写方法和 IE、npapi 完全一致了。
#56#//让 ppapi 语法兼容 npapi:为 <object> 添加 func( ) 函数
if($B.ppapi) {
Object.prototype.func = function(funcname, para) {
return this.postMessageAndAwaitResponse([funcname, para]);
}
}
#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 框架, 页面有可能会出现如下错误, 导致针对插件的函数无法运行:
#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 就是这个修改版.AF.func("print", "");
统统修改成这种:
ffunc(AF, "print", "");