1

Тема: VBS: IE9 - как такое возможно?

Коллеги,

здравствуйте.
Второй день не могу решить простую задачу.

1. Этот скрипт (вкратце) работал и работает под WindowsXP - абсолютно никаких проблем:
Сам скрипт:

' IE9

  Set objIE = CreateObject("InternetExplorer.Application")
    objIE.Navigate("c:\temp\zzViewZ.htm")
    Do While objIE.Busy : Wscript.Sleep 500 : Loop
  objIE.Top = 0
  objIE.Left = 0
  objIE.Height = objIE.document.parentWindow.screen.height - 28
  objIE.Width = objIE.document.parentWindow.screen.width

  objIE.Visible = True
  
    WScript.Echo "123"

  WScript.Quit 0

Тестовая HTML-страница - сохранить в c:\temp\zzViewZ.htm :

<!DOCTYPE html>
<html class="i-ua_js_no i-ua_css_standart  m-sandbox i-ua_browser_msie" lang="ru">
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7,IE=edge">
</head>

<body>

one two three

</body>

</html>

2. И все это абсолютно не работает в Windows 7 (64 разряда) под IE9.

Ошибка возникает при попытке использовать objIE.document .

Перечитал много всего.
Выводы пугают количеством предстоящих переделок скриптов под Windows 7 + IE9.
Прошу помочь разобраться.

Спасибо.

2

Re: VBS: IE9 - как такое возможно?

Решение.

Перед тем как сообщить правильный ответ несколько граблей, по которым я прошел - чтобы вы не теряли время на тупиковые ветки в дальнейшем.

ИНТЕРНЕТу такая проблема знакома.

Много времени потратил на тезис IE9 не поддерживает свойство .document .
Многостраничные темы посвящены обсуждению этого тезиса!
Это не так - убедиться можно легко, если вместо локального HTML-файла попробовать открыть любой сайт.
Жаль, что я догадался это сделать слишком поздно.

Второе глобальное направление решения этой проблемы - напихать в заголовок локального HTML-файла как можно больше тегов, которые якобы заставят IE9 перейти в режим совместимости с IE8.
В моем первом посте можно видеть результаты проработки этого решения - дело не в этом.

Причина в следующем:
IE9 при открытии локального HTML-файла, создает новый child process, в который и грузит HTML-файл.
При этом содержимое этой страницы родительскому объекту IE9 элементарно не видно.
Почему это так - объяснить не могу.
Могу предложить может быть и не слишком изящный, но вполне работающий выход:

' IE9

  Set objIE = CreateObject("InternetExplorer.Application")
    objIE.Navigate("c:\temp\zzViewZ.htm")
    Do While objIE.Busy : Wscript.Sleep 500 : Loop

' какая версия IE ?
  Set objFSO = CreateObject("Scripting.FileSystemObject") 
    strVer = objFSO.GetFileVersion("C:\Program Files\Internet Explorer\iexplore.exe")
    strVer = Mid(strVer, 1, 1)    
  Set objFSO = Nothing 

'  это IE9 - ищем объект, в который загружен наш файл 
If (strVer = "9") Then
  Set objIE = Nothing
  
  Do While (objIE Is Nothing)
    Set objShellApp = CreateObject("Shell.Application")
    For Each objWindow In objShellApp.Windows
      If LCase(objWindow.LocationName) = LCase("zzViewZ.htm") Then
          Set objIE = objWindow
          ' WScript.Echo objWindow.LocationName
      End If
    Next
    If (objIE Is Nothing) then Set objShellApp = Nothing
    Wscript.Sleep 500
  Loop
End If
' дальше - как обычно

  objIE.Top = 0
  objIE.Left = 0
  objIE.Height = objIE.document.parentWindow.screen.height - 28
  objIE.Width = objIE.document.parentWindow.screen.width

  objIE.Visible = True
  
    WScript.Echo "123"

  WScript.Quit 0

Да, еще одно.
Эта ошибка плохо идентифицируется еще и потому, что появляются как минимум 2 разных сообщения:
- The object invoked has disconnected from its client. (80010108)
- Unspecified error (80004005)

3

Re: VBS: IE9 - как такое возможно?

Slav пишет:

2. И все это абсолютно не работает в Windows 7 (64 разряда) под IE9.

Ошибка возникает при попытке использовать objIE.document .

Замечу, что пример, приведенный в первом посте, работает у меня без ошибок.
Windows 7 Домашняя Базовая, Service Pack 1, x64
IE 9.0.8112.16421, Выпуски обновления 9.0.12 (KB2761465).
В диспетчере появляется 2 процесса iexplore.exe, типичные для моей системы при CreateObject("InternetExplorer.Application"):
CommandLine: "C:\Program Files (x86)\Internet Explorer\iexplore.exe" SCODEF:13628 CREDAT:145409
CommandLine: "C:\Program Files (x86)\Internet Explorer\iexplore.exe" -Embedding

Щт Уккщк Куыгьу Туче
’ҐЄгй п Є®¤®ў п бва Ёж : 1251