2012-11-02 11 views
5

Z poziomu mojej aplikacji Qt chcę wielokrotnie otwierać adresy URL w tej samej karcie/oknie przeglądarki. (Rodzaj „orzeźwiający” tej zakładce programowo)Otwórz adres URL w określonej zakładce/oknie przeglądarki

Korzystanie

QDesktopServices::openUrl(QUrl("http://www.domain.tld")); 

otwiera nową kartę/okno na każde wezwanie. Czy istnieje możliwość dodania gdzieś parametru "target ="?

+0

Hi Elwood, czy kiedykolwiek znaleźć rozwiązanie tego? Mam dokładnie ten sam problem: http://stackoverflow.com/questions/15116760/open-a-web-page-from-a-desktop-app-repeatedly-in-same-window – sipi

+0

Sipickles: Sorry, no. Wygląda na to, że nie jest to możliwe. Myślałem o stworzeniu lokalnego pliku HTML z '' w nim, a następnie nadpisanie tego pliku na żądanie. Ale jeszcze tego nie próbowałem, a to podejście prawdopodobnie ma pewne wady. – Elwood

+0

Szukam tej samej rzeczy (otwórz w tej samej karcie), ale najlepiej w Qt5. Ale wziąłbym również rozwiązanie Qt4. – amenthes

Odpowiedz

2

To, o co prosisz, nie jest możliwe w sposób, w jaki to sobie wyobrażasz. openUrl() używa systemu operacyjnego do określenia programu, aby otworzyć argument, jak wspomniano w jego dokumentacji.

Może być kilka obejść, ale żadna z nich nie działa dobrze lub nie działa we wszystkich przeglądarkach. Po prostu ten rodzaj drobnoziarnistej kontroli prawdopodobnie nie będzie dla ciebie możliwy.

Jeśli chcesz sterować zakładką w przeglądarce, możesz znaleźć okno reprezentowane przez tę kartę i zamknąć ją tuż przed otwarciem nowej. To rozwiązanie jest trochę hacky.

Kolejnym hackim rozwiązaniem jest znalezienie HWND w polu edycyjnym z adresem URL i próba zmiany jego tekstu za pomocą SendMessage(). Nie będzie to jednak działać w Chrome, ponieważ nie ma osobnego kontrolera w oknie adresu URL. Może działać na Firefox lub IE.

Lepszym rozwiązaniem jest utworzenie własnej przeglądarki internetowej, którą kontrolujesz za pomocą Qt WebKit. Łatwo jest renderować stronę i zmieniać wyświetlany URL. QWebView jest łatwą w użyciu implementacją QtWebKit.

+0

Dzięki phyatt. Wolałbym nie powielać istniejącej funkcjonalności przeglądarki, pobierając QtWebKit. – Elwood

0

Może znalazłeś tę przydatnych:

można otworzyć stronę internetową i przeładować aktywną kartę.

Jeśli podasz nazwę przeglądarce jako argumentu, to będzie znaleźć i przeładować bieżąca strona

https://unix.stackexchange.com/questions/37258/refresh-reload-active-browser-tab-from-command-line

+0

to interesująca propozycja, ale nie do końca to, co miałem na myśli. Z jednej strony zależy to od 'xdotool', więc nie jest dostępne na różnych platformach. – amenthes

Powiązane problemy