JavaScript-请教JAVASCRIPT调用BHO的实现

JavaScript-请教JAVASCRIPT调用BHO的实现

瑾兮 发布于 2017-07-01 字数 178 浏览 1159 回复 3

需要在网页里点击链接触发javascript,并启动一个客户端程序,另外需要把一个参数传入客户端,客户端需要解析这个参数。IE系列可以写active x实现BHO,但像firefox chrome中怎么来实现

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

清晨说ぺ晚安 2017-08-28 3 楼

可以在js中直接启动应用程序,并传递参数给该应用程序,下面是函数:

function execCommand(command, strArgs)
{
// separate command arguments
var args = new Array();
var quoted = false;
var double_quoted = false;
var param = "";
for (var i = 0; i < strArgs.length; i++) {
var charArgs = strArgs.substring(i,i + 1);
if ( charArgs == """ && !quoted ) { double_quoted =! double_quoted; }
else if ( charArgs == "'" && !double_quoted ) { quoted =! quoted; }
else if ( /s/.test(charArgs) && !quoted && !double_quoted ) {
if (param != "") args.push( param );
param = "";
} else param += charArgs;
}
if (param != "") args.push( param );
// create a file object for the external program
try {
var applicFile = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
var applic = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess);
//var applic = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess2);
applicFile.initWithPath(command);
if (!applicFile.exists()) {
alert("Executable '" + command + "' does not exist.");
} else {
applic.init(applicFile);
applic.run(false, args, args.length);
//applic.runAsync(args, args.length, null, false);
}
} catch (e) {
alert("Cannot run executable: " + e);
return false;
}
}

偏爱自由 2017-08-24 2 楼

FireFox用Gecko-SDK或xul-runner来实现组件,可以通过javascript来调用

参考文档见:

http://developer.mozilla.org/en/docs/Getting_started_with_XULRunner
http://developer.mozilla.org/en/docs/XULRunner
http://www.xulplanet.com/tutorials/xultu/

一个sample:
http://developer.mozilla.org/samples/xulrunner/myapp.zip

一个功能更多的sample: 一个gecko内核的浏览器
http://benjamin.smedbergs.us/xulrunner/mybrowser-0.2.2.xulapp

或者用更NPAPI写一个能在firefox和chrome上通用的插件

这是相关资料
https://sites.google.com/site/crxdoczh/devguide/implementation/npapi

清晨说ぺ晚安 2017-08-21 1 楼

要实现“启动一个客户端程序,另外需要把一个参数传入客户端,客户端需要解析这个参数”这样的功能需要自己开发Filefox的XPCOM,本身XMCOM的开发设计很多内容,Mozilla本身实现了一套浏览器的COM框架,你可以参考我之前写得博客.
http://blog.csdn.net/chenyanxu/article/details/4511050
http://blog.csdn.net/chenyanxu/article/details/3973545

js中的调用的代码:
Var my_xpcom;

netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");

const cid = "@mydomain.com/XPCOMSample/MyComponent;1";

my_xpcom = Components.classes[cid].createInstance();

my_xpcom = my_xpcom.QueryInterface(Components.interfaces.IMyComponent);