I released Zscaler Safe Shopping
for Internet Explorer in March 2012. This was my first attempt at writing a Browser Helper Object
(BHO) and it was written in C#. There are are number of disadvantages to using C#, as I described in my last post
. C++ is required for "advanced" features, like intercepting and modifying all HTTP/HTTPS traffic.
Ultimately, I decided to bite the bullet and to learn C++ on Windows in order to deliver some great extensions for Internet Explorer this year. It was quite a steep learning curve to go from from C# and the scripting languages (Perl, Ruby, etc.) that I knew well, to C++. CodeProject
turned out to be a great source of sample code for C++ BHOs. Various colleagues also helped to shorten my learning curve. Now here were are and Zscaler Safe Shopping
has been rewritten from scratch in C++. If you are using version 1.0, an upgrade to the new 1.1
will speed up your browsing when the extension is in use. C# BHOs require that the .Net framework be loaded first, which takes at least 0.20s-0.30s for every tab. With C++, load time is significantly reduced.
It is very important that the BHO loads quickly, in under about 0.20s so as to not negatively impact the user experience and avoid warning messages. Starting with Internet Explorer 9.0, a warning is shown to the user when the browser opens to disable "slow" add-ons:
|Warning about slow add-ons|
It is much harder to write browser add-ons for IE than it is for Firefox and Chrome, but you can do quite a lot with IE. Here is the breakdown of the "advanced" features available to add-ons on the three major browsers:
|Feature ||Firefox ||Internet Explorer ||Chrome|
|Modify HTTP requests and responses ||YES ||YES ||YES|
|Access the file system ||YES ||YES ||NO|
|Include C++ libraries ||YES ||YES* ||NO|
|Run executables ||YES ||YES ||NO|
|Run server inside browser ||YES ||YES ||NO|
(* IE add-ons are C++ libraries, of course)
I plan on releasing some exiting browser add-ons for Internet Explorer this year, keep an eye on this blog!