С одной стороны, вы должны использовать существующий экземпляр Internet Explorer вместо создания нового.К сожалению, способ, которым можно было бы ожидать этого (GetObject(, "InternetExplorer.Application")
), не работает для COM-объектов Internet Explorer.AppActivate
также здесь не помогает, потому что он не возвращает дескриптор объекта приложения, который вам нужен для вызова его методов.Вместо этого вам нужно сделать это следующим образом:
Set app = CreateObject("Shell.Application")
For Each wnd In app.Windows
If InStr(1, wnd.FullName, "iexplore.exe", vbTextCompare) > 0 Then
Set ie = wnd
Exit For
End If
Next
Если вы хотите выбрать экземпляр, у которого открыта определенная страница, вы можете, например, проверить заголовок этой страницы, чтобы сделать выбор:
wnd.Document.Title = "something"
или
InStr(1, wnd.Document.Title, "something", vbTextCompare) > 0
Ваша вторая проблема заключается в том, что VBScript не распознает символическую константу navOpenInNewTab
.Вы должны либо использовать числовое значение (как определено в перечислении BrowserNavConstants
):
ie.Navigate "http://www.example.com", CLng(2048)
, либо сначала определить константу самостоятельно:
Const navOpenInNewTab = &h0800&
ie.Navigate "http://www.example.com", navOpenInNewTab
Примечаниечто здесь вы должны использовать шестнадцатеричную запись с конечным амперсандом, потому что значение должно быть длинным, и вы должны использовать литералы в определениях Const
.Выражения, такие как вызов функции CLng
, недопустимы.
В качестве альтернативы вы можете открыть URL-адрес в новой вкладке, полностью пропустив второй параметр метода Navigate
ивместо этого предоставив значение "_blank"
для третьего параметра:
ie.Navigate "http://www.example.com", , "_blank"
Однако я не уверен, что это всегда откроет новую вкладку в текущем окне (может зависеть от настроек вкладки браузера),поэтому я бы рекомендовал использовать второй параметр (флаги), как описано выше.