Есть форма на ней tabcontrol и webkitbrowser как можно реализировать возможность открытия новой табы и там переход по ссылке которая имеет вид Code: http:// Простыми словами: сделать возможность открытия ссылки в новой вкладке. Прошу вас написать событие, или подскажите в какую сторону копать. И если возможно, то подскажите как прикрутить progressbar к webkitbrowser ?? Заранее благодарен..
Я как раз недавно эксперементировал с готовым сишарповским браузером. И так, что нам надо: Code: public ObservableCollection<TabItem> MyColl { get; set; }//Создаём коллекцию вкладок. List<WebBrowser> BrowserList = new List<WebBrowser>();//Создаём список веббраузеров, для использования кадлой новой ссылки, будем добавлять новый браузер. //Так же нам нужна переменная типа Uri(я создавал глобальную propdp, но это мне надо было для специфическойго действия, а так можно взять List<Uri> ) //Сверху над tabcontrol я бросил TextBox, то есть типо адресной строки(хотя на самом деле лучше зделать, наверное, ComboBox, если хочешь сделать выпадающий список при наборе адреса, но мне это было не нужно, я ии не замарачивался.) //Инициировал я префикс как то так: internal static void WritePrefixUri(TextBox UriTextBox) { UriTextBox.Text = UriTextBox.Text == "http://www." ? "https://" : "http://www."; UriTextBox.CaretIndex = UriTextBox.Text.Length; } if (UrlLine.Text.Replace(" ", "") != null) { //progressBar1.BindingGroup.BeginEdit(); progressBar1.IsIndeterminate = true; TryOpenUri(UrlLine.Text, TabControlWeb.SelectedIndex); } //Важная вещь - в браузер ури, надо передавать ссылку с префиксом, поэтому нужно корректировать адрес задаваемый в текст боксе : public void TryOpenUri(string GetUrlString, int CurrentTabIndex) { Uri Source; try { if (GetUrlString.StartsWith("http://www.") || GetUrlString.StartsWith("https://www.")) { MessageBox.Show("Standart Eingabe, keine Korrektur nötig."); Source = new Uri(UrlLine.Text); CurrentTabNavigation(Source); // WebBrowser.Navigate(Source); } else if (GetUrlString.StartsWith("www.") || GetUrlString.StartsWith("http://") || GetUrlString.StartsWith("https://")) { MessageBox.Show("www. oder Http Eingabe"); if (!GetUrlString.StartsWith("https://")) { Source = GetUrlString.StartsWith("www.") ? new Uri("http://www." + GetUrlString.Substring(4)) : new Uri("http://www." + GetUrlString.Substring(7)); } else { Source = new Uri("https://" + GetUrlString.Substring(8)); } CurrentTabNavigation(Source); // WebBrowser.Navigate(Source); } else { MessageBox.Show("URL- задан без префикса "); Source = new Uri("http://www." + GetUrlString); // WebBrowser.Navigate(Source); CurrentTabNavigation(Source); } textBox1.Text = Source.ToString(); } catch (Exception UriException) { MessageBox.Show( "Внимание ошибка!Обратите внимание на причину возникновение!",UriException.Message, MessageBoxButton.OK, MessageBoxImage.Information); Source = new Uri("https://www.google.com/search?q=" + GetUrlString); // WebBrowser.Navigate(Source); CurrentTabNavigation(Source); } } //Добавляем табы private void testLoad() { WebBrowser browser = new WebBrowser(); // Uri myUri = new Uri("http://www.google.de"); // browser.Navigate(CheckUri); browser.LoadCompleted += new LoadCompletedEventHandler(WebBrowser_LoadCompleted); BrowserList.Add(browser); TabItem item = new TabItem(); item.Header = "Новый таб"; //"Header "; //+ i.ToString(); item.Foreground = Brushes.Red; item.Background = Brushes.AliceBlue; item.Content = BrowserList[BrowserList.Count - 1]; // MyColl.Add(item); TabControlWeb.Items.Add(item); TabControlWeb.SelectedItem = item; // MessageBox.Show(TabControlWeb.Items.CurrentItem.ToString()); } //Чековаем табы private void MenuItem_Click(object sender, RoutedEventArgs e) { var currentItem = (MenuItem)sender; // MessageBox.Show(currentItem.PersistId.ToString()); // MessageBox.Show(cm.Items.IndexOf(currentItem).ToString()); if (currentItem.IsChecked == true) { for (int i = 0; i < cm.Items.Count; i++) { MenuItem CheckThis = new MenuItem(); CheckThis = (MenuItem) cm.Items.GetItemAt(i); CheckThis.IsChecked = cm.Items.IndexOf(currentItem) != i ? false : true; } } } //Навигация private void GetStartTab(Uri DefaultStartUri) { WebBrowser browser = new WebBrowser(); // Uri myUri = new Uri("http://www.google.de"); browser.Navigate(DefaultStartUri); browser.LoadCompleted += new LoadCompletedEventHandler(WebBrowser_LoadCompleted); BrowserList.Add(browser); //TabItem item = new TabItem(); TabItem item = new TabItem(); item.Header = "google.de"; //"Header "; //+ i.ToString(); item.Content = BrowserList[BrowserList.Count - 1]; // MyColl.Add(item); TabControlWeb.Items.Add(item); } Хочу уточнить, что это "грязный код" - черновик, комментарии удалять мне лень, метод GetStartTab - ацкий, задумывалась немного по другом, но в итоге напихал туда всего и не переназвал.
[Qoute]как можно реализировать возможность открытия новой табы и там переход по ссылке которая имеет вид[/Qoute] Может я чего то не понимаю? Добавление- открытие нового таба у меня описано в методе testLoad().
Смотри внимательно. Если ссылка вида Code: <a href='index.php?do=46466'></a> Переходя по ней браузер подгружает страницу и все. Если же ссылка вида : Code: <a href='http://google.com/index.php?do=46466'></a> То в браузере открывается новая вкладка и в ней ужэ открывается сторонний сайт.
Я читал внимательно, ты не правильно проблему описал. Вот тут есть решение, требуется перехватывать новые окна:ТЫЦ
Я прошу прощения, всё же я не правильно прочёл, при чём два раза. Для того, что бы открывать ссылки в новом окне - нужно проверять их, например опять же перехватываешь евент browser.Navigating, то есть евент вызывается непосредственно перед переходом к документу, и здесь можно проверить формат ссылки(у меня в коде выше есть) - если она подходит под критерии http:// - то добавляем новый таб и прикручиваем сцыль к нему. P.S. Или я всё таки правильно прочёл?))Что то я уже запутался Вообщем если это не то, что нужно то пиши, попробуем докопаться до истины