Запустить веб-страницу из моего приложения в Linux

У меня есть приложение, которое запускает веб-страницу в «текущем» браузере, когда пользователь ее выбирает. Эта часть моего приложения отлично работает в версии для 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);

}

person KPexEA    schedule 01.10.2008    source источник


Ответы (4)


Если вы пишете это для современных дистрибутивов, вы можете использовать xdg-open:

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

Если вы используете более старую версию, вам придется использовать команду для рабочего стола, например gnome-open или exo-open.

person John Millikin    schedule 01.10.2008
comment
поэтому я просто изменил бы имя программы с /usr/bin/firefox на xdg-open? - person KPexEA; 01.10.2008
comment
Измените его на /usr/bin/xdg-open - person John Millikin; 01.10.2008

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».

person ephemient    schedule 01.10.2008

Примечание для xdg-open: проверьте http://portland.freedesktop.org/wiki/ , раздел «Использование Xdg-utils»; в нем говорится, что вы можете включить сценарий xdg-open в свое собственное приложение и использовать его в качестве запасного варианта, если в целевой системе еще не установлен xdg-open.

person oliver    schedule 06.10.2008

Если вы не хотите задействовать дополнительные приложения, просто используйте встроенные команды удаленного управления firefox. Например:

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

См. подробные сведения об использовании на http://www.mozilla.org/unix/remote.html

person matli    schedule 01.10.2008