我有一个应用程序,当用户选择时,它会在"当前"浏览器中启动网页。我的应用程序的这一部分在Windows版本中运行良好,但我不知道如何在Linux构建中做到这一点。
现在,Linux版本是为Firefox硬编码在一个特定的目录中,每次都会运行一个新的实例,并且不会显示我传入的URL。我希望它不要每次都启动一个新版本,而是在当前打开的页面中打开一个新页面,如果它已经在运行的话。
对于我使用的窗口:
ShellExecute(NULL,"open",filename,NULL,NULL,SW_SHOWNORMAL);
对于Linux,我目前使用:
pid_t pid;
char *args[2];
char *prog=0;
char firefox[]={"/usr/bin/firefox"};
if(strstri(filename,".html"))
prog=firefox;
if(prog)
{
args[0]=(char *)filename;
args[1]=0;
pid=fork();
if(!pid)
execvp(prog,args);
}
如果你是为现代发行版写这篇文章,你可以使用xdg-open
:
$ xdg-open http://google.com/
如果使用的是旧版本,则必须使用桌面特定命令,如gnome-open
或exo-open
。
xdg-open是新标准,您应该尽可能使用它。然而,如果发行版的使用年限超过几年,它可能就不存在了,替代机制包括$BROWSER(旧的尝试标准)、gnome-open(gnome)、kfmclient exec(KDE)、exo-open(Xfce),或者自己解析mailcap(text/html处理程序可能是浏览器)。
话虽如此,大多数应用程序都不需要那么多工作——如果它们是为特定环境构建的,它们会使用该环境的启动机制。例如,Gnome有Gnome_;url_;显示,KDE有KRun,大多数终端程序(例如,mutt)解析mailcap等。对浏览器进行硬编码并允许分发服务器或用户覆盖默认值也很常见。
我不建议硬编码,但如果你真的想在Firefox中打开一个新的选项卡,你可以使用"Firefox-new-tab$URL"。
打开xdg的注意事项:checkhttp://portland.freedesktop.org/wiki/,"使用Xdg-utils"一节;它指出,您可以在自己的应用程序中包含xdg-open脚本,并在目标系统尚未安装xdg-open的情况下将其用作回退。
如果不想涉及其他应用程序,只需使用firefox的内置远程控制命令即可。例如:
firefox -remote 'openurl(http://stackoverflow.com)'
Se详细用法http://www.mozilla.org/unix/remote.html