Элементы управления ActiveX - это просто COM-объекты, которые, как минимум, реализуют IUnknown. Последние версии IE также начали требовать от объекта реализации IObjectSafety. Чтобы сделать что-нибудь полезное, объект должен также реализовать некоторые другие интерфейсы Ole, такие как IDispatch, IOleObject и т. Д. Объект должен быть способен создавать с помощью CoCreateInstance (), что означает, что вам нужно зарегистрировать его каким-то образом с реестром. Вам не нужно использовать guid в теге, вы также можете использовать AppId , если вы зарегистрируете его.
Вы также можете написать некоторый управляемый код и запустить его внутри IE. Работает так, что CLR регистрирует MIME-фильтр , когда он установлен. Затем, когда IE видит, что вы отправляете что-то подходящего MIME-типа, он передает код в CLR для обработки. CLR выполняет изолированную программную среду кода в той степени, в которой ему предоставляются только разрешения на доступ в Интернет, поэтому он не может делать все, что предоставляет инфраструктура. Вам нужно будет проверить конкретную документацию на предмет того, что можно и что нельзя делать в этой зоне безопасности.
Некоторые компромиссы:
Простота установки: элементы управления ActiveX требуют, чтобы вы упаковали все в файл .CAB с файлом .INI, который довольно загадочно описывает требования к установке. Если вам необходимо установить дополнительные зависимости с вашими модулями (такими как библиотеки ATL / MFC или другие сторонние модули), это будет довольно сложно. С модулем .net вы просто отправляете его с правильным MIME-типом, но вы должны убедиться, что ваши пользователи имеют правильную версию платформы (которую вы можете проверить через строку user agent на вашем сайте).
Безопасность: элементы управления ActiveX - это просто собственный код, работающий в системе пользователей, поэтому теоретически они могут делать все, что захотят. На практике LoRIE ограничивает его во многих случаях, и вам необходимо выполнить ряд специальных действий, таких как доступ к реестру и файловой системе (см. Общие сведения и работа в защищенном режиме ).
Потоки: поскольку элементы управления ActiveX выполняются в потоке пользовательского интерфейса браузера, вы должны быть уверены, что не выполняете длительные операции блокировки в этом потоке, поэтому вы должны выполнять потоки самостоятельно. Если ваша длительная блокирующая операция манипулирует DOM, вы должны сами маршалировать интерфейсы IHTMLxxx, используя функции GIT или COM Marshalling . Я не уверен, запускаются ли апплеты .net в потоке пользовательского интерфейса браузера, но в C # это легче обрабатывать, я уверен.
Объекты браузера. Если вы хотите использовать объекты IE / Shell в управляемом расширении, большую часть времени вам приходится писать взаимодействие самостоятельно, так как Framework не выполняет большую работу по объединению этих интерфейсов в управляемые объекты. См. http://pinvoke.net, чтобы получить небольшую помощь для начала работы.
Совместимость: существуют проблемы с размещением разных версий среды выполнения в одном и том же процессе. До недавнего времени это было вообще невозможно, но я думаю, что с версиями 3.x это стало возможным до некоторой степени. В результате, если вы нацелились на .net 2.0, а кто-то другой уже загрузил .net 1.0 как часть своего расширения браузера, вы проиграете. В общем случае IE и оболочка Windows не поддерживают управляемые расширения. Это фильтрующее MIME-приложение .net может быть заметным исключением, но имейте в виду, что могут быть потенциальные проблемы.