IE BHO c ++ обмен данными между вкладками - PullRequest
4 голосов
/ 03 сентября 2011

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

Альтернативы, которые я могу придумать, от более простых до более сложных:

1) Запись / чтение данных в / из файловой системы или в реестр, см. статья MSDN и статья Codeproject . Вопрос : доступна ли эта информация из экземпляров BHO, работающих в разных потоках?

2) Разработка службы Windows или фонового приложения, которое взаимодействует со всеми экземплярами BHO, см. статья MSDN . Проблема : У меня НЕТ ИДЕИ, как это сделать или с чего начать. Я беспокоюсь о том, что пользователю приходится много устанавливать.

3) Предоставление механизмов IPC, чтобы различные экземпляры BHO могли напрямую взаимодействовать друг с другом. Как и в случае использования IGlobalInterfaceTable , см. ookii article . Проблема : Да, вы можете хранить указатели в этой IGlobalInterfaceTable и получать файлы cookie для доступа к ним, но как вы можете поделиться одним файлом cookie, полученным в экземпляре BHO 1, с экземпляром BHO 2, чтобы второй экземпляр может получить доступ к данным, вставленным в IGlobalInterfaceTable первым? Разве у нас снова не возникает та же проблема с обменом данными?

Ну, как вы видите, после целой недели поиска решения я просто не знаю, как начать решать эту проблему. Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

1 голос
/ 04 сентября 2011

1, за исключением того, что место, которое может написать обычный веб-сайт, - , изолированное от надежного веб-сайта, к которому можно получить доступ .

2 Написание службы, вероятно, самый простой способ, учитываябольшое количество документации о том, как написать службу Windows (вы даже получаете мастер проектов ATL, если используете Visual C ++), и ваш код посредника может пережить сбой процессов с вкладками или даже выход пользователя из системы.

3Действительно, у вас снова возникает та же проблема совместного использования: сообщения COM блокируются UIPI, если вы не можете изменить фильтр сообщений, но сообщения, используемые COM, не документированы.Я бы использовал что-то вроде отображения именованных каналов / файлов памяти.

Вам необходимо разместить код брокера связи где-нибудь и создать его только один раз.Вы можете написать что-то наподобие того, как компьютеры в рабочей группе выбирают главный браузер (своего рода болтливый) или использовать посреднический процесс для выполнения коммуникационной работы (например, в службе Windows).

1 голос
/ 03 сентября 2011

Часто для этой цели используются файлы с отображением в память.Однако это нетривиальный объем работы, так как вы должны убедиться, что они ACL-файлы должным образом разрешают межпроцессный доступ (каждая вкладка может быть в другом процессе) и работают на нескольких уровнях целостности.

...