在Linux中从我的应用程序启动网页

时间:2020-03-06 14:57:28  来源:igfitidea点击:

我有一个应用程序,当用户选择该应用程序时,它将在"当前"浏览器中启动网页。我的应用程序的这一部分在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);

}

解决方案

如果我们是为现代发行版编写此代码,则可以使用xdg-open

$ xdg-open http://google.com/

如果我们使用的是旧版本,则必须使用桌面专用命令,例如" gnome-open"或者" exo-open"。

如果我们不想涉及其他应用程序,只需使用firefox内置的远程控制命令。例如:

firefox -remote 'openurl(http://stackoverflow.com)'

Se的详细用法,请访问http://www.mozilla.org/unix/remote.html

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"。

xdg-open的注意事项:检查http://portland.freedesktop.org/wiki/的"使用Xdg-utils"部分;它指出我们可以在自己的应用程序中包含xdg-open脚本,并在目标系统尚未安装xdg-open的情况下将其用作备用。