[oodisc] Mozilla compiling

Vadim Vinichenko vnv на 14000.ru
Ср Сен 18 19:34:02 MSD 2002


Sergey Degtyaryov пишет:
 > Доброго дня, Alexandr A. Alexandrov.


 > Т.е. Вам надо:
 > Сделать интерфейс, сделать функции, работающие с user_prefs
 > посредством navigator.preference, зарегистрировать интерфейс в
 > Mozilla. Учитывая то, что это уже есть для картинок, можно
 > попробовать выдернуть, это самый простой вариант, но я не знаю
 > откуда.
 >

Я сейчас посмотрел интересу ради, что происходит с блокировкой картинок. 
  Смотрим comm.jar!content/cookie/cookieNavigatorOverlay.xul
Вот это, например, пункт меню, который блокирует изображения.

<menuitem id="BlockImages" label="&cookieBlockImagesCmd.label;"
                   accesskey="&cookieBlockImagesCmd.accesskey;"
                   msg="&cookieBlockImagesMsg.label;"
                   oncommand="CookieImageAction('imageBlock');"/>
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
От него, как видно, ниточка тянется к функции CookieImageAction().
Функция делает свое дело через объект permissionmanager:

function CookieImageAction(action) {
...skip...
       switch (action) {
...skip...
         case "imageBlock":
           permissionmanager.add(window._content.location, false, 
IMAGEPERMISSION);
           ^^^^^^^^^^^^^^^^^
           element = document.getElementById("BlockImages");
           alert(element.getAttribute("msg"));
           break;
...skip...

А сам объект берется вот откуда (выше в том же файле):

  permissionmanager =
         Components.classes["@mozilla.org/permissionmanager;1"]
           .getService(Components.interfaces.nsIPermissionManager);

т.е. следы уходят в бинарник, который и записывает правило в файл, и 
(видимо, где-то на уровне Gecko) в дальнейшем руководствуется содержимым 
этого файла. Это вызов через XPCOM (Cross Platform Component Object 
Model), интерфейс-обертку для доступа из XUL/js к "внешним" объектам. 
Собственно, так Мозилла и работает - значительная часть действий с GUI 
заканчивается дерганием кого-то через XPCOM. Но как 
приготовить/модифицировать объект для такого вызова на стороне C++ и как 
его потом правильно зарегистрировать, я, к сожалению, совсем не знаю.

--
С уважением,
Вадим




Подробная информация о списке рассылки Oo-discuss