0%

myBase:插件开发脚手架

花了几天时间,写了一个 myBase 的背景高亮插件,这里整理一下。

1. 插件模板

虽然说 myBase 支持使用 js 编写插件,但是其开放的接口很有限,限制也非常多,连常用的 window、document 等都没有,更别提使用 jQuery 这样的类库,咨询软件的开发者,答复是使用 plugin.runDomScript, 这个函数从一开始就看到了,但是实在迫不得已,真的不想用这个函数。没办法,只能向现实屈服。

因为要使用 plugin.runDomScript 这个函数加载并执行主要的功能代码,而功能代码只能以字符串的形式作为参数传递给 plugin.runDomScript ,所以如果将代码写在一个文件中,那么结果就是要在一堆引号里写代码了,很麻烦,所以这里干脆分成两个文件。

  • myPlugin.js
    这个要开发的插件文件(文件名自己改),放在 安装目录/plugins/ 路径下。

  • userJs.js
    该文件是主要功能代码文件(文件名自己改),放在 安装目录/scripts/ 路径下。myPlugin.js 调用 userJs.js

1.1 myPlugin.js

直接套用下面代码即可。

要注意的点:

(1)sCategory 决定该插件出现的位置,是主菜单,还是上下文菜单,详细设定值可参考已安装的其它插件。
(2)sCondition不是很清楚的话,直接全用上就行了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//sValidation=nyfjs
//sCaption=插件的名称
//sHint=插件的描述
//sCategory=MainMenu.Edit; Context.HtmlEdit
//sCondition=CURDB; DBRW; CURINFOITEM; HTMLEDIT
//sID=p.myPluginId
//sAppVerMin=7.0
//sAuthor=IUpdatable

try {
var xNyf = new CNyfDb(-1);
if (xNyf.isOpen()) {
if (!xNyf.isReadonly()) {
if (plugin.isContentEditable()) {
var sEditor = plugin.getCurEditorType().toLowerCase();
if (sEditor == 'htmledit') {
var xFn = new CLocalFile(plugin.getPathToDomScripts(), 'userJs.js');
var jsCode = xFn.loadText('auto');
plugin.runDomScript(-1, jsCode);
// 下面就可以调用 userJs.js 中的函数了
plugin.runDomScript(-1, 'userJs.hello();');
}
}
}
}
} catch (error) {
alert("error:" + error);
}

1.2 userJs.js

该文件里添加实际的功能函数,函数中就可以正常使用window、document对象了。

userJs.js文件模板代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
! function (e) {
var n = "object" == typeof window && window || "object" == typeof self && self;
"undefined" != typeof exports ? e(exports) : n && (n.userJs = e({}), "function" == typeof define && define.amd && define([], function () {
return n.userJs
}))
}
(
function (e) {

function hello() {
alert("This is userJs!");
}

return e.hello = hello, e;
});

2. 总结

myBase 本身就是一个很小众的软件,开发插件的人应该就更加寥寥无几了吧。

具体的实例应用可以参考这篇文件:

  • myBase:插件方式实现代码背景高亮