Недавняя группа системных обновлений Windows привела к неработоспособности утилиты автоматизации AutoIt в контексте работы с браузером IE и сайтами, представляющими собой группу фреймов, объединенных во FRAMESET.
После установки системного обновления KB3025390 вызов функции _IEFrameGetObjByName() из библиотеки IE.au3 приводит к ошибке следующего вида:
"C:\autoit\Include\IE.au3" (1808) : ==> Variable must be of type "Object".: Return SetError($_IEStatus_Success, $oTemp.GetElementsByTagName($s_TagName).length, $oTemp.GetElementsByTagName($s_TagName)) Return SetError($_IEStatus_Success, $oTemp^ ERROR >Exit code: 1 Time: 1.645
Детальное рассмотрение алгоритмов работы IE.au3 приводит к заключению о том, что обновление KB3025390 делает невозможным обращение к содержимому вложенных фреймов, несмотря на то, что они находится в одном и том же домене и ограничения кросс-доменной политики безопасности не должно применяться в данном случае. Аналогичную проблему подтверждают и в других источниках, не связанных с программированием под AutoIt.
Решение проблемы простое – деинсталляция обновления KB3025390 восстанавливает работоспособность скриптов, взаимодействующих с фреймами.
PS: Что характерно, согласно описанию обновления KB3025390 – оно должно исправлять проблемы, возникающие после установки предыдущего кумулятивного патча IE, выпущенного парой недель ранее. И ни слова про изменение политик работы с фреймами там не указано. Вот так и всегда – исправляя одно, ломают другое.