WebBrowser и вызов внутренней функции

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

WebBrowser и вызов внутренней функции

Сообщение Joo » 18.04.2010 (Вс) 17:41

Привет! Уж не думал что придется вернуться, хоть и временно, к VB6, но все таки.

Есть программа на VB6, используется компонент WebBrowser. Задача такая нужно при помощи JavaScript вызвать функцию которая находится внутри программы.

Есть такой вариант но он мне не подходит:
VB:
Код: Выделить всё
Public Sub Hello(Text As String)
    MsgBox(Text)
End Sub
Public Sub AssignTag(CustomTag)
    On Local Error Resume Next
    CustomTag.setAttribute "Custom", Me, 1
End Sub
Private Sub UpdateObject()
    On Error GoTo lError
     Dim i As Long
        For i = 0 To Wb.Document.All.length - 1
             AssignTag (Wb.Document.All.Item(i))
       Next i
    Exit Sub
lError:
End Sub
Private Sub wb_DownloadComplete()
    UpdateObject
End Sub


HTML:
Код: Выделить всё
...
<a href="#" onClick="this.Custom.Hello('Hello World!!!')">Hello</a>
...


Не подходит по той простой причине что вызов из JS способом описанным ниже не проходит.
HTML:
Код: Выделить всё
//Такой код уже не работает
function ExHello(){
    this.Custom.Hello('Hello World');
}
...
<a href="#" onClick="ExHello();">Hello</a>
"Им будет не просто, тем кто полагается на истину авторитета, вместо того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: WebBrowser и вызов внутренней функции

Сообщение iGrok » 18.04.2010 (Вс) 18:17

Joo писал(а):
Код: Выделить всё
//Такой код уже не работает
function ExHello(){
    this.Custom.Hello('Hello World');
}
...
<a href="#" onClick="ExHello();">Hello</a>

А с чего бы ему работать, если this уже не туда указывает? Либо оставляй другую ссылку на объект где-то в скрипте и используй её, либо попробуй делать так:
Код: Выделить всё
function ExHello(obj){
    obj.Custom.Hello('Hello World');
}
...
<a href="#" onClick="ExHello(this);">Hello</a>
label:
cli
jmp label

Joo
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 762
Зарегистрирован: 14.08.2008 (Чт) 11:55
Откуда: Казахстан

Re: WebBrowser и вызов внутренней функции

Сообщение Joo » 18.04.2010 (Вс) 18:25

iGrok писал(а):А с чего бы ему работать, если this уже не туда указывает? Либо оставляй другую ссылку на объект где-то в скрипте и используй её, либо попробуй делать так:
Код: Выделить всё
function ExHello(obj){
    obj.Custom.Hello('Hello World');
}
...
<a href="#" onClick="ExHello(this);">Hello</a>


Я понял тебя, так работать будет. Я просто не удачный пример привел, да и с this я лоханулся когда набирал.
Ссылку я для примера привел, мне нужно чтобы просто из JS можно было вызвать.
Код: Выделить всё
<script language="JavaScript">
//...
Custom.Hello('Hello World');
//...
</script>


В .NET например делается просто:
Код: Выделить всё
   WebBrowser.ObjectForScripting = MyObject
   'Где MyObject это объект описанный внутри программы, и его методы будут доступны для JS
"Им будет не просто, тем кто полагается на истину авторитета, вместо того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: WebBrowser и вызов внутренней функции

Сообщение iGrok » 18.04.2010 (Вс) 18:35

Ну я же говорю, сделай там отдельную ссылку на объект.
Т.е. создай невидимый тег, и присвой ему в какой-нибудь атрибут Me.
А в скрипте напиши процедурку, возвращающую объект для скриптинга из этого тега.

Или, если можно работать со скриптами "снаружи" - создай переменную, указывающую на твой объект.

Кода не дам, сам такими вещами не занимался, но с виду это вполне возможно и реализуемо.
label:
cli
jmp label

Joo
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 762
Зарегистрирован: 14.08.2008 (Чт) 11:55
Откуда: Казахстан

Re: WebBrowser и вызов внутренней функции

Сообщение Joo » 18.04.2010 (Вс) 18:37

iGrok писал(а):Ну я же говорю, сделай там отдельную ссылку на объект.
Т.е. создай невидимый тег, и присвой ему в какой-нибудь атрибут Me.
А в скрипте напиши процедурку, возвращающую объект для скриптинга из этого тега.

Кода не дам, сам такими вещами не занимался, но с виду это вполне возможно и реализуемо.


Я просто думал возможно есть более правильный подход, но вероятно это лучшее что можно сделать в данном случае.
"Им будет не просто, тем кто полагается на истину авторитета, вместо того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог


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

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

Сейчас этот форум просматривают: SemrushBot и гости: 64

    TopList