Новый ActiveXObject('Word.Application') создает новый процесс winword.exe, когда безопасность IE не позволяет создавать объекты
Мы используем MS Word в качестве средства проверки орфографии для нескольких полей на веб-сайте частной компании, и когда настройки безопасности IE верны, это работает хорошо. (Для зоны для сайта установлено значение "Доверенная", а доверенная зона изменена, чтобы позволить элементу управления работать без запроса.)
Используемый нами скрипт создает объект word и впоследствии закрывает его. Пока объект существует, выполняется процесс winword.exe, но он уничтожается при закрытии объекта Word.
Если наш сайт не установлен в доверенной зоне (интернет-зона с уровнем безопасности по умолчанию), вызов, который создает объект Word, завершается с ошибкой, как и ожидалось, но процесс winword.exe все еще создается. У меня нет никакого способа взаимодействовать с этим процессом в сценарии, поэтому процесс остается без изменений, пока пользователь не выйдет из системы (у пользователей нет возможности вручную уничтожить процесс, и это не будет хорошим решением, даже если они это сделают.)
Вызов, который пытается создать объект...
try {
wordApplication = new ActiveXObject('Word.Application');
} catch(error) {
// irrelevant code removed, described in comments..
// notify user spell check cannot be used
// disable spell check option
}
Таким образом, каждый раз, когда страница загружается, этот код может запускаться снова, создавая еще один потерянный процесс winword.exe.
wordApplication
конечно, не определено в блоке catch.
Я хотел бы иметь возможность заранее определить настройки безопасности браузера, но я провел некоторый поиск по этому вопросу и не думаю, что это возможно.
Менеджмент тут доволен как есть. Пока безопасность IE установлена правильно, она работает, и она хорошо работает для наших целей. (В конечном итоге мы можем рассмотреть другие варианты проверки орфографии, но это было быстро, недорого и делает все, что нам нужно.)
Эта последняя проблема беспокоит меня, и я хотел бы что-то с этим сделать, но у меня нет идей, и у меня есть другие вещи, которые больше нуждаются в моем внимании.
Прежде чем отложить это в сторону, я подумал, что попрошу предложения здесь.
2 ответа
Я не нашел ответа на эту проблему, и меня беспокоит то, что проблема подразумевает в безопасности Internet Explorer (я забыл упомянуть в своем предыдущем посте версию, которую я использую: IE 7.)
Тем не менее, я реализовал обходной путь, который меня не устраивает, но, тем не менее, чувствую себя более комфортно, чем вообще никаких проверок...
Теперь код пытается сначала открыть другой объект, и, если это не удается, код предполагает, что Word тоже не откроется, и выдает ошибку. С этого момента больше не будет выполняться вызов новых ActiveXObject(), и любая попытка проверки орфографии приведет к ошибке.
try {
oMSInfo = new ActiveXObject('Msinfo32.MSInfo.1');
} catch (error) {
// error handling code not shown...
return;
}
Этот объект не запускает новый процесс при сбое вызова нового ActiveXObject(). Это также не оказывает заметного влияния на системные ресурсы.
Если ваш браузер создает экземпляр объекта, сам объект не блокируется политиками безопасности браузера, за исключением того, что это утечка безопасности.
Попробуйте "application.visible=true" или "application.show()", чтобы узнать, где приложение запрашивает взаимодействие с пользователем.
Подсказка: 'typeof application=="undefined"' означает, что переменная 'application' не определена, а 'typeof application=="unknown"' означает более или менее определенную переменную, заполненную внешним, проприетарным объект, и если вам действительно нужно знать, как с ним обращаться, прочитайте руководство — в этом случае может помочь нажатие [F11] в любом открытом окне упомянутого приложения.
Может быть полезным ресурсом: https://docs.microsoft.com/en-us/office/vba/api/Word.Application