ActiveX is a framework for defining reusable software components in a programming language independent way. Software applications can then be composed from one or more of these components in order to provide their functionality.
It was introduced in 1996 by Microsoft as a development of its Component Object Model (COM) and Object Linking and Embedding (OLE) technologies and is commonly used in its Windows operating system, although the technology itself is not tied to it.
Many Microsoft Windows applications — including many of those from Microsoft itself, such as Internet Explorer, Microsoft Office, Microsoft Visual Studio, and Windows Media Player — use ActiveX controls to build their feature-set and also encapsulate their own functionality as ActiveX controls which can then be embedded into other applications. Internet Explorer also allows embedding ActiveX controls onto web pages.
ActiveX controls — small program building blocks — can serve to create distributed applications that work over the Internet through web browsers. Examples include customized applications for gathering data, viewing certain kinds of files, and displaying animation.
One can compare ActiveX controls in some sense to Java applets: programmers designed both of these mechanisms so that web browsers could download and execute them. However, they also differ:
- Java applets can run on nearly any platform, while ActiveX components officially operate only with Microsoft's Internet Explorer web browser and the Microsoft Windows operating system.Malware, such as computer viruses and spyware, can be accidentally installed from malicious websites using ActiveX controls (drive-by downloads). Programmers can write ActiveX controls in any language that supports COM component development, including the following languages/environments:
Faced with the complexity of OLE 2.0 and with poor support for COM in MFC, Microsoft rationalized the specifications to make them simpler, and re-branded the technology as ActiveX in 1996. Even after simplification, users still required controls to implement about six core interfaces. In response to this complexity, Microsoft produced wizards, ATL base classes, macros and C++ language extensions to make it simpler to write controls.
Starting with Internet Explorer 3.0 (1996), Microsoft added support to host ActiveX controls within HTML content. If the browser encountered a page specifying an ActiveX control via an
OBJECT tag, it would automatically download and install the control with little or no user intervention. This made the web "richer" but provoked objections (since such controls only ran on Windows) and security risks (especially given the lack of user intervention). Microsoft subsequently introduced security measures to make browsing including ActiveX safer. For example:
- digital signing of installation packages (Cabinet files and executables)
- controls must explicitly declare themselves safe for scripting
- increasingly stringent default security settings
- Internet Explorer maintains a blacklist of bad controls
ActiveX in non-IE applications
It may not always be possible to use Internet Explorer to execute ActiveX content (e.g. on a WINE installation), nor may a user want to.
- FF ActiveX Host can run ActiveX controls in Mozilla Firefox for Windows.
- Mozilla ActiveX Control was last updated in late 2005, and runs in Firefox 1.5.
Other ActiveX technologies
Microsoft has developed a large number of products and software platforms using ActiveX objects. Some remain in use as of 2009:
- ActiveX Data Objects (ADO)
- Active Server Pages
- ActiveMovie, later renamed DirectShow
- Active Messaging, later renamed Collaboration Data Objects
- Active Scripting, a technology for scripting ActiveX objects
- ActiveX Streaming Format (ASF), renamed Advanced Streaming Format, then to Advanced Systems Format
- Active Setup
- Active Template Library
- Google Native Client, an alternative development from Google
- IUnknown interface
- NPAPI, an alternative interface for web-browser plugins
- Windows DNA
- Java Beans
Wikipedia (issue: ActiveX )