我有一个应用程序,当用户选择它时,会在“当前”浏览器中启动网页。我的应用程序的这部分在Windows版本中运行良好,但我无法弄清楚如何在Linux版本中执行此操作。
现在,Linux版本在特定目录中为Firefox进行了硬编码,并且每次运行它的新实例并且不显示我传入的URL。我希望它不会每次都启动新版本但是如果它已在运行,只需在当前打开的新页面中打开一个新页面。
对于Windows我使用:
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);
}
答案 0 :(得分:7)
如果你是为现代发行版写的,可以使用xdg-open
:
$ xdg-open http://google.com/
如果您使用的是旧版本,则必须使用特定于桌面的命令,例如gnome-open
或exo-open
。
答案 1 :(得分:2)
xdg-open是新标准,您应尽可能使用它。但是,如果发行版超过几年,它可能不存在,替代机制包括$ BROWSER(较旧的尝试标准),gnome-open(Gnome),kfmclient exec(KDE),exo-open(Xfce),或者自己解析mailcap(text / html处理程序可能是一个浏览器)。
话虽如此,大多数应用程序都不会为这么多工作而烦恼 - 如果它们是为特定环境构建的,那么它们就会使用该环境的启动机制。例如,Gnome有gnome_url_show,KDE有KRun,大多数终端程序(例如,mutt)解析mailcap等。硬编码浏览器并允许分发者或用户覆盖默认值也很常见。
我不建议对此进行硬编码,但如果您真的想在Firefox中打开新标签,可以使用“firefox -new-tab $ URL”。
答案 2 :(得分:1)
xdg-open的注释:check http://portland.freedesktop.org/wiki/,“使用Xdg-utils”部分;它声明您可以在自己的应用程序中包含xdg-open脚本,并在目标系统没有安装xdg-open的情况下将其用作后备。
答案 3 :(得分:0)
如果您不想涉及其他应用程序,只需使用firefox的内置远程控制命令即可。 E.g:
firefox -remote 'openurl(http://stackoverflow.com)'