scriptcontrol jscript object expected error

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
eugene2005
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 178
Зарегистрирован: 30.10.2005 (Вс) 21:35
Откуда: от Верблюда!

scriptcontrol jscript object expected error

Сообщение eugene2005 » 12.03.2006 (Вс) 6:54

делаю

sc.AddCode ("alert('helo')")
кричит что object expected

если vbscript то sc.AddCode ("msgbox ""helo""") ок

обясните как правильно включать и работать с JScript
привидите мне начальные примеры от чего можно отталкиваться... в поиске ничего не нашёл

VOS
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 72
Зарегистрирован: 04.11.2004 (Чт) 18:01
Откуда: СПб

Сообщение VOS » 14.03.2006 (Вт) 20:04

Оказывается, функции alert языка JScript нет! Alert - метод объекта window, а в scriptcontrol-е 'window' is undefined. Window появляется только внутри броузера.
- Папа, а правда, что форумы делают человека идиотом?
- Гыыы, лол, сынок!

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 14.03.2006 (Вт) 20:30

Обалдеть! Не может быть! Правда!?

eugene2005
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 178
Зарегистрирован: 30.10.2005 (Вс) 21:35
Откуда: от Верблюда!

Сообщение eugene2005 » 15.03.2006 (Ср) 2:18

да но в том то и дело что я подключаю обект window но тем не менее ничего не выходит!

Odrick
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 503
Зарегистрирован: 28.09.2003 (Вс) 2:04

Сообщение Odrick » 15.03.2006 (Ср) 12:56

Что-то меня гложат смутные сомнения, что из VB повлиять на JS будет весьма проблематично ;)
То, что для одних константа, для других только переменная...

eugene2005
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 178
Зарегистрирован: 30.10.2005 (Вс) 21:35
Откуда: от Верблюда!

Сообщение eugene2005 » 15.03.2006 (Ср) 14:22

ну я же скрипт котрол пользую и ИЕ там два языка есть и

Odrick
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 503
Зарегистрирован: 28.09.2003 (Вс) 2:04

Сообщение Odrick » 15.03.2006 (Ср) 15:04

Гы :) Ну давай тогда разбираться, как ты подключаеш "объект window" и главное куда?
То, что для одних константа, для других только переменная...

eugene2005
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 178
Зарегистрирован: 30.10.2005 (Вс) 21:35
Откуда: от Верблюда!

Сообщение eugene2005 » 15.03.2006 (Ср) 15:08

типа так

dim nWin as HTMLWindow2

addobject "window",nWin
правильно?

это в webbrowser

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 15.03.2006 (Ср) 15:16

Попробуй window.alert().
Лучший способ понять что-то самому — объяснить это другому.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 15.03.2006 (Ср) 15:30

eugene2005 писал(а):типа так

dim nWin as HTMLWindow2

addobject "window",nWin
правильно?

Ну вон мне невооружённым глазом видно, что подключаешь ты не window, а Nothing...
Изображение

eugene2005
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 178
Зарегистрирован: 30.10.2005 (Вс) 21:35
Откуда: от Верблюда!

Сообщение eugene2005 » 15.03.2006 (Ср) 15:38

а как таки подключить window и alert ?

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 15.03.2006 (Ср) 15:47

Ну вон мне невооружённым глазом видно, что подключаешь ты не window, а Nothing...
Это почему? Может автор пропустил несколько строк типа Set nWin = doc.parentWindow. Хотя и мой невооруженный взгляд отметил косяк - HTMLWindow2 не существует. Либо HTMLWindow, либо IHTMLWindow2.
Лучший способ понять что-то самому — объяснить это другому.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 15.03.2006 (Ср) 15:48

Кстати, если объект - nothing, контрол выдаст ошибку, что nothing подключать нельзя.
Лучший способ понять что-то самому — объяснить это другому.

eugene2005
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 178
Зарегистрирован: 30.10.2005 (Вс) 21:35
Откуда: от Верблюда!

Сообщение eugene2005 » 15.03.2006 (Ср) 16:02

ну хоть ты убейся
document отлично работает и VBS и JScript ok
а этого злощастного alerta не могу вывести :oops:

Dim nDoc As IHTMLDocument
Dim nWin As IHTMLWindow2

sc.AddObject "window", nWin
sc.AddObject "document", nDoc

window.alert("debug alert is ok");

HTMLWindow нет
помогите страждущему до алерта :lol:

PS. и зачем мне это надо Set nWin = doc.parentWindow ?

Odrick
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 503
Зарегистрирован: 28.09.2003 (Вс) 2:04

Сообщение Odrick » 15.03.2006 (Ср) 16:13

Потому что у тебя, исходя из приведенного кода, nDoc является не более чем пустой ссылкой. Объекта переменная не содержит.
То, что для одних константа, для других только переменная...

eugene2005
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 178
Зарегистрирован: 30.10.2005 (Вс) 21:35
Откуда: от Верблюда!

Сообщение eugene2005 » 15.03.2006 (Ср) 16:18

ну о чом ты говоришь! я эту "пустую ссылку" замечательно использую полноценно и нет нареканий!

я могу спокойно делать getelementsbytagname и т.п
а вот window и этот alert никак =) видимо, что ту упускаю из виду и невнимателен... но хоть убей не вижу :roll:

Odrick
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 503
Зарегистрирован: 28.09.2003 (Вс) 2:04

Сообщение Odrick » 15.03.2006 (Ср) 17:24

Блин... Ты заставил меня самому все это проделать :) Вот тебе рабочий код:

Код: Выделить всё
    Dim Ie As InternetExplorer
   
    Set Ie = New InternetExplorer
   
    Ie.Visible = True
   
    Ie.Navigate2 "d:\test.html"
   
    Do While Ie.Busy
        DoEvents
    Loop
   
    scct.AddObject "window", Ie.document.parentWindow
   
    scct.ExecuteStatement "window.alert('aaa');"


scct - ScriptControl. Там где Navigate поставь ссылку на любую страницу.
То, что для одних константа, для других только переменная...

eugene2005
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 178
Зарегистрирован: 30.10.2005 (Вс) 21:35
Откуда: от Верблюда!

Сообщение eugene2005 » 15.03.2006 (Ср) 17:39

ах вот оно как... через document к window идём :shock:

Odrick
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 503
Зарегистрирован: 28.09.2003 (Вс) 2:04

Сообщение Odrick » 15.03.2006 (Ср) 18:07

ну дык именно это тебе и говорил Antonariy несколькими постами выше ;)
То, что для одних константа, для других только переменная...

VOS
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 72
Зарегистрирован: 04.11.2004 (Чт) 18:01
Откуда: СПб

Сообщение VOS » 15.03.2006 (Ср) 18:16

RayShade писал(а):Обалдеть! Не может быть! Правда!?

Хм. Ты смайл пропустил или реально не знал??

Odrick писал(а):
...
Set Ie = New InternetExplorer
...
scct.AddObject "window", Ie.document.parentWindow
...
scct.ExecuteStatement "window.alert('aaa');"

Ё! И вся эта лажа из-за одного алерта!!! Пользуйся MsgBox'ом!!! :lol:
- Папа, а правда, что форумы делают человека идиотом?
- Гыыы, лол, сынок!

Odrick
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 503
Зарегистрирован: 28.09.2003 (Вс) 2:04

Сообщение Odrick » 15.03.2006 (Ср) 18:24

VOS это ты мне? :) Мне это, как ты понимаеш, не нужно. А вообще идея топика в том, как получить и передать ScriptControl'у правильные ссылки на объекты window и document, дабы потом он мог с ними правильно работать, если ты не понял ;)
То, что для одних константа, для других только переменная...

eugene2005
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 178
Зарегистрирован: 30.10.2005 (Вс) 21:35
Откуда: от Верблюда!

Сообщение eugene2005 » 16.03.2006 (Чт) 10:53

ну а теперь обясните мне почему нужно через докюмент выходить на парент виндоу если есть прямая ссылка на него так же как и на докюмент. неужели document - это главная матка IE :lol:
Последний раз редактировалось eugene2005 16.03.2006 (Чт) 11:08, всего редактировалось 1 раз.

eugene2005
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 178
Зарегистрирован: 30.10.2005 (Вс) 21:35
Откуда: от Верблюда!

Сообщение eugene2005 » 16.03.2006 (Чт) 11:01

VOS писал(а):
RayShade писал(а):Обалдеть! Не может быть! Правда!?

Хм. Ты смайл пропустил или реально не знал??

Odrick писал(а):
...
Set Ie = New InternetExplorer
...
scct.AddObject "window", Ie.document.parentWindow
...
scct.ExecuteStatement "window.alert('aaa');"

Ё! И вся эта лажа из-за одного алерта!!! Пользуйся MsgBox'ом!!! :lol:


лажа не в алерте а в концепции скрипта

Спасибо коллективному разуму. Данная проблема решена.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 16.03.2006 (Чт) 11:26

ну а теперь обясните мне почему нужно через докюмент выходить на парент виндоу если есть прямая ссылка на него так же как и на докюмент

Где она есть? В контексте ie-страницы есть, а в контексте свежесозданного скриптконтрола откуда возьмется? Точнее, это скрипты html-страницы выполняются в контексте класса окна, поэтому alert им доступен автоматически. И не сделать
Код: Выделить всё
property get window
    set window = me
end property
было бы преступлением.

А скриптконтрол вообще не подозревает, что на свете существует mshtml с его документами, окнами, прочей ерундой... Для того, чтобы скрипты, скопированные с html-странички, в нем работали без изменений, нужно хотя бы создать в нем глобальные объекты, характерные для ie-страницы, такие как document, window. Короче, вся начинка HTMLWindow2. А если пробежаться по коллекции document.all и добавить элементы с проставленными id, то и срипт типа window.alert(txtEmail.value) отработается на ура!
Лучший способ понять что-то самому — объяснить это другому.


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

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

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

    TopList