Самая большая проблема, которую мы имеем с одной кодовой базой и нашим собственным отображением между функциями IE и FF, заключается в том, что интерфейсы немного отличаются или имеют иные ошибки, поэтому вы не можете использовать согласованный подход в разных браузерах.
У вас будет либо более тяжелая вспомогательная библиотека, чтобы сделать эти 2 интерфейса подходящими для вашего использования, либо вы будете переписывать некоторые обходные пути.
Поскольку у нас сначала был IE BHO, у нас есть что-то вроде следующего, чтобы отобразить содержимое IE в FF, но в зависимости от того, что вы используете, вам может понадобиться сопоставление в обоих направлениях - от самого подробного до наименьшего. Вот несколько быстрых идей для вас
// Normally if you where just doing IE or FF you would use one technique for getting a different interface
// as we are mixing the code, we have macros which allows you to use a combination of code
// eg. for IE CComQIPtr<IHTMLDocument2> doc( disp );
// eg. for FF nsCOMPtr<IHTMLDocument2> doc( do_QueryInterface(disp) );
// combined in code will be CComQIPtr<IHTMLDocument2> doc( do_QueryInterface(disp) );
// FF strips off the QI, IE strips out the do_QueryInterface.
#ifdef MOZILLA
#define CComPtr nsCOMPtr
#define CComQIPtr nsCOMPtr
#define IWebBrowser2 nsIDOMWindow
#define IHTMLWindow2 nsIBrowserDOMWindow
#define IHTMLDocument2 nsIDOMHTMLDocument
#define get_Document GetDocument
#define get_type GetType
#else
// Pointer handling for nsCOMPtr vs CComPtr/CComQIPtr
#define getter_AddRefs(x) (&(x).p)
#define do_QueryInterface(x) (x)
#endif
Удачи!