Чтобы работать в IE, вам также необходимо реализовать IObjectSafety, чтобы IE знал, что безопасно вызывать ненадежного абонента и / или с ненадежными данными. (Если это действительно безопасно, то есть)
Лично я делал это только на C ++ и ATL, а не на C #, но вот пост в блоге, который, похоже, поможет вам достичь этого в C #.
http://blog.devstone.com/aaron/2007/06/12/ImplementingIObjectSafetyInNETMarkingClassesSafeForScripting.aspx
Причина этого заключается в том, что сценарии злых людей могут использовать ваш объект, чтобы обойти обычную защиту, предлагаемую IE, поэтому ваш объект ActiveX должен защищать себя от ненадежных страниц.
Когда вы подписываете такси, вы говорите пользователю, что кабина, которую он загружает, это та, которую, по его мнению, он загружает, т.е. Если они доверяют вам как издателю, то они могут полагать, что ActiveXObject не сделает ничего плохого сам по себе или в сочетании с другим кодом, которому они доверяют.
Когда вы реализуете IObjectSafety, вернуть INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA, вы говорите IE, что этот объект не может быть использован кем-либо еще злонамеренно, и поэтому его безопасно запускать вместе с кодом, которому пользователь явно не доверяет.