открывать все в окне WebBrowser.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
DeMONiZ
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 162
Зарегистрирован: 03.01.2009 (Сб) 18:32

открывать все в окне WebBrowser.

Сообщение DeMONiZ » 13.03.2009 (Пт) 18:37

загружаю страницу в WebBrowser перехожу по ссылке и открывается IE нужно запретить это. Надо чтоб все открывалось в WebBrowser.
дайте пример пожалусто.

dr.MIG
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1441
Зарегистрирован: 18.12.2004 (Сб) 9:53
Откуда: г.Ярославль

Re: открывать все в окне WebBrowser.

Сообщение dr.MIG » 13.03.2009 (Пт) 20:25

На первый взгляд, в клссическом случае, всё довольно просто. Если открывается в новом окне, значит для ссылки <a> установлен атрибут target=_blank. После того как получишь текст страницы получи все ссылки (document.links) и перебрав их все, установи им значение target в дефолтное.
Теперь о извращениях. Ещё новое окно может открывать JavaScript, тут уже видимо придётся убирать для ссылки onclick, при этом ссылка по которой щелкают может быть вовсе и не ссылкой, а чем угодно другим. В этом случае надо, видимо, проверять у каких элементов установлено значения для onclick и проверять, нет ли там неугодного нам скрипта для открытия окна.
Salus populi suprema lex

DeMONiZ
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 162
Зарегистрирован: 03.01.2009 (Сб) 18:32

Re: открывать все в окне WebBrowser.

Сообщение DeMONiZ » 13.03.2009 (Пт) 20:30

да именно таржет бланк!
После того как получишь текст страницы получи все ссылки (document.links) и перебрав их все, установи им значение target в дефолтное. дай пример как это сделать.
Или не плохо бы было сделать чтобы нажимаю на ссылку в WebBrowser1 она открывается в WebBrowser2 который установлен на той же форме что и первый.

dr.MIG
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1441
Зарегистрирован: 18.12.2004 (Сб) 9:53
Откуда: г.Ярославль

Re: открывать все в окне WebBrowser.

Сообщение dr.MIG » 13.03.2009 (Пт) 20:38

Как-то так:
Код: Выделить всё
For each a in document.links
     a.setAttribute("target", "_self")
Next
Salus populi suprema lex

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Re: открывать все в окне WebBrowser.

Сообщение SSecurity » 13.03.2009 (Пт) 22:17

DeMONiZ писал(а):да именно таржет бланк!
После того как получишь текст страницы получи все ссылки (document.links) и перебрав их все, установи им значение target в дефолтное. дай пример как это сделать.
Или не плохо бы было сделать чтобы нажимаю на ссылку в WebBrowser1 она открывается в WebBrowser2 который установлен на той же форме что и первый.


по поводу открытия во втором окне можно заставить WebBrouser ловить нажатие на ссылки :) внутри документа - затем ты их можешь обрабатывать .... если там тоже самый target = _blank то смотришь href и делаешь webbrowser2.navigate2 href :)
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

DeMONiZ
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 162
Зарегистрирован: 03.01.2009 (Сб) 18:32

Re: открывать все в окне WebBrowser.

Сообщение DeMONiZ » 14.03.2009 (Сб) 17:37

dr.MIG что то не получается.....в коде твоем знака ровно не хватает...

dr.MIG
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1441
Зарегистрирован: 18.12.2004 (Сб) 9:53
Откуда: г.Ярославль

Re: открывать все в окне WebBrowser.

Сообщение dr.MIG » 14.03.2009 (Сб) 20:03

Не удастся код мой копипастом запустить :). Потому что, во-первых, надо подождать пока вся страница загрузится, во-вторых, использовать WebBrowser.Document (или создать экземпляр объекта HTMLDocument и ему присвоить ссылку на этот WebBrowser.Document). Подробнее -- поиск по форуму или одноименная статья из моего блога.

Кстати, как уже сказали, не обязательно перебирать все <a> и всем им менять target. Можно, как вариант, обрабатывать событие document_onclick(), где проверять является ли элемент по которому щелкнули (document.activeElement) гиперссылкой и если да, то менять значение атрибута.
Salus populi suprema lex

Star Cat
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 73
Зарегистрирован: 25.07.2003 (Пт) 15:51
Откуда: От туда

Re: открывать все в окне WebBrowser.

Сообщение Star Cat » 16.03.2009 (Пн) 14:42

А так?
Код: Выделить всё
Private Sub WebBrowser1_NewWindow2(ppDisp As Object, Cancel As Boolean)
    Cancel = True
End Sub
Star Cat

dr.MIG
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1441
Зарегистрирован: 18.12.2004 (Сб) 9:53
Откуда: г.Ярославль

Re: открывать все в окне WebBrowser.

Сообщение dr.MIG » 16.03.2009 (Пн) 15:32

Этот код просто отменит открытие ссылки, если она загружается не в self-окно. Автору нужно не это.
Salus populi suprema lex

Star Cat
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 73
Зарегистрирован: 25.07.2003 (Пт) 15:51
Откуда: От туда

Re: открывать все в окне WebBrowser.

Сообщение Star Cat » 16.03.2009 (Пн) 20:44

dr.MIG писал(а):Этот код просто отменит открытие ссылки, если она загружается не в self-окно. Автору нужно не это.

Вот весь код:
Код: Выделить всё
Dim tURL As String

Private Sub WebBrowser1_BeforeNavigate2(ByVal pDisp As Object, URL As Variant, flags As Variant, TarGetFrameName As Variant, PostData As Variant, Headers As Variant, Cancel As Boolean)
    Dim H As String
    Cancel = True
    WebBrowser1.Navigate tURL
    tURL = vbNullString
End Sub

Private Sub WebBrowser1_NewWindow2(ppDisp As Object, Cancel As Boolean)
    Cancel = True
End Sub

Private Sub WebBrowser1_StatusTextChange(ByVal Text As String)
    tURL = Text
End Sub
Star Cat

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Re: открывать все в окне WebBrowser.

Сообщение SSecurity » 16.03.2009 (Пн) 21:21

:) БЕЗ комментариев:))))))))))))

вот код "http://localhost/z.php"

Код: Выделить всё
<html>
<body>
<a href="http://localhost/" target="_blank">www</a>
</body>
</html>


а вот код (на форме WebBrowser1 и WebBrowser2), в референсах ссылка на Microsoft HTML Objects Library (для простоты)

Код: Выделить всё
Dim WithEvents Page As HTMLDocument
Dim Link As HTMLAnchorElement

Private Sub Form_Load()
  WebBrowser1.Navigate2 "http://localhost/z.php"
End Sub

Private Function Page_onclick() As Boolean
  If TypeName(Page.activeElement) = "HTMLAnchorElement" Then
    Set Link = Page.activeElement
    If Link.Target = "_blank" Then
      WebBrowser2.Navigate2 Link.href
    End If
  End If
End Function

Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
  Set Page = WebBrowser1.Document
End Sub
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

dr.MIG
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1441
Зарегистрирован: 18.12.2004 (Сб) 9:53
Откуда: г.Ярославль

Re: открывать все в окне WebBrowser.

Сообщение dr.MIG » 16.03.2009 (Пн) 22:36

SSecurity, ещё пара не лишних строчек к твоему коду :):
Код: Выделить всё
Private Function Page_oncontextmenu() As Boolean
    If TypeName(Page.activeElement) = "HTMLAnchorElement" Then
        Set Link = Page.activeElement
    End If
    Page_oncontextmenu = True
End Function

Private Sub WebBrowser1_NewWindow2(ppDisp As Object, Cancel As Boolean)
    Cancel = True
    WebBrowser2.Navigate Link.href
End Sub
Salus populi suprema lex


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Google-бот и гости: 7

    TopList