Портируйте расширение Firefox на BHO (Browser Helper Objects, также известные как расширения IE) - PullRequest
6 голосов
/ 24 ноября 2010

У меня есть расширение Firefox, которое я хотел бы перенести в IE, я не хочу его снова кодировать.

Есть ли что-то, что может мне помочь? Это может прийти по-разному:

  • IE BHO, который может визуализировать расширение firefox, с функциями IE, сопоставленными с теми, которые вызывает расширение FF.
  • Генератор, который принимает расширение FF и генерирует BHO (в C, C # и т. Д. Все, что он хочет).

РЕДАКТИРОВАТЬ: Может не быть такой вещи. Я оставлю вопрос открытым ...

Ответы [ 3 ]

1 голос
/ 28 декабря 2010

Самая большая проблема, которую мы имеем с одной кодовой базой и нашим собственным отображением между функциями 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

Удачи!

1 голос
/ 30 ноября 2010

Легкого выхода нет. Модели очень разные. Абстрагируй свой основной код настолько, насколько это возможно, и напиши клей один раз для каждого браузера.

0 голосов
/ 10 декабря 2010

в зависимости от плагина, внедряющего js (и привязку, т. Е. К методам, которые вы используете в ff), гораздо более переносимым

существуют сайты / программное обеспечение, которые могут использовать один код, который компилируется как в ie, так и в ff

...