2014-12-30 6 views
6

Próbuję otworzyć okno przeglądarki z LinkLabel na formularzu systemu Windows. Po kliknięciu, sterowanie przechodzi do zdarzenia LinkClicked a kod wywołuje domyślną przeglądarkę za pomocą:Jak otworzyć link do tego samego okna przeglądarki lub karty z Process.Start?

System.Diagnostics.Process.Start("http://www.google.com"); 

Chciałbym móc kliknąć link (tj uruchomić uruchomić wiele razy), ale tylko w tym samym oknie przeglądarki lub kartę. Oczywiście wiele kliknięć otwiera za każdym razem nową kartę Google. Wiem, jak określić nazwanego okna za pomocą łącza podobnego do:

<a href="http://www.google.com" target="googlewin">Click Here!</a> 

Ale jak to zrobić w poleceniu Start?

ETA: kliknąłem w przeglądarce Internet Explorer własnego linku; łącza, O formie, a to otwiera nowe okno za każdym razem, więc może nawet Microsoft może to zrobić. Hmmm.

Odpowiedz

0

Ditch Process.Start: najprawdopodobniej nie można tego zrobić. Plik wykonywalny musiałby obsługiwać opcje wiersza poleceń, które pozwalają wybrać kartę i wykonać nawigację. Nie widzę żadnej takiej obsługi w żadnej przeglądarce: Chrome; IE lub Firefox

Jedyną rozsądną alternatywą, którą mogę wymyślić jest użycie opublikowanych mechanizmów interop do pracy z oknem przeglądarki. Gdy masz już okno przeglądarki, możesz je skryptować, aby ustawić położenie okna. Przy takim podejściu trzeba użyć kontrolki WebBrowser lub coś w rodzaju Awesomium.

+0

Jeśli nie można tego zrobić w Process.Start, to może tak powinieneś powiedzieć? Jest powód, dla którego nie używam formantu WebBrowser - i to był mój pierwszy wybór. Używałem formantu przeglądarki, aby przejść do strony internetowej z ramką IFrame z funkcją Google Maps. To, co to robi, to rzucenie dwóch błędów JavaScript. Właśnie dlatego próbuję otworzyć okno przeglądarki poza Winform. – Cyberherbalist

+0

Ponadto, błędy JS są normalne dla kursu dotyczącego hostowania okna, zazwyczaj po prostu je ignoruję i wszystko działa poprawnie. – codekaizen

0

Czuję, że podchodzisz do tego w niewłaściwy sposób.

Po kliknięciu, sterowanie przechodzi do zdarzenia LinkClicked a kod wywołuje domyślnie> przeglądarkę używając:

Właściwie, to nie powoływania domyślną przeglądarkę, ale raczej tworzy nową instancję domyślną przeglądarka. Tak, można uzyskać uchwyt nowo utworzonego procesu i użyć raczej skomplikowanego sposobu dodawania kolejnych zakładek, ale taka praktyka byłaby ponownym wynalezieniem koła. Najlepiej jest stworzyć własną kontrolę. Proces.Start to sposób na utworzenie nowego procesu i nie należy go wykorzystywać do zmiany już uruchomionego procesu.

1

Dla przeglądarki Internet Explorer można to zrobić, korzystając z zestawu SHDocVw.

Zamiast używać process.start wystarczy utworzyć instancję SHDocVw.InternetExplorer i używać jej do nawigacji w tej samej przeglądarce, kiedy tylko chcesz. Oto prosty przykład.

private SHDocVw.InternetExplorer IE; 

private void Form1_Load(object sender, EventArgs e) 
    { 
    IE = new SHDocVw.InternetExplorer(); 
    IE.Navigate("http://stackoverflow.com/"); 
    IE.Visible = true; 
    } 

private void button1_Click(object sender, EventArgs e) 
    { 
    IE.Navigate("http://google.com/"); 
    } 

Jeśli konkretnie chcesz używać Process.Start następnie dla programu Internet Explorer można iterację SHDocVw.ShellWindows znaleźć internet explorer, którego chcesz używać do nawigowania.

foreach (SHDocVw.InternetExplorer IE in new SHDocVw.ShellWindows()) { 
    if (IE.FullName.ToLower.Contains("iexplore") & IE.LocationURL.ToLower.Contains("someurl")) { 
     IE.Navigate("http://google.com/"); 
    } 
} 
Powiązane problemy