>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Разработка http://forum.mozilla-russia.org/viewforum.php?id=18 >XPCOM C++ http://forum.mozilla-russia.org/viewtopic.php?id=41310 |
tpb12 > 30-10-2009 14:40:38 |
Добрый день, уважаемые специалисты! Проблема в следующем. Пишу на С++ XPCOM, а точнее переписываю на плюсах скриптовый код для запуска sidebar-а. Все шло хорошо, пока я не наткнулся на следующий код: например - if (sidebar.contentDocument.location.href != url) sidebar - это nsCOMPtr<nsIDOMElement> sidebar; получается он так: document->GetElementById( nsString(L"sidebar"), getter_AddRefs(sidebar)))) а что такое contentDocument (бывает еще contentWindow) ? Как его получить? Перерыл весь интернет, ничего толком не нашел. Заранее спасибо. |
igorsub > 30-10-2009 15:11:15 |
Вообще есть целый сайт - http://developer.mozilla.org. |
Al_H > 30-10-2009 19:43:55 |
contentDocument - документ, содержащийся в окне или фрейме. |
Elexander > 31-10-2009 11:15:26 |
Попробуйте через QueryInterface попросить у sidebar один из этих интерфейсов. Только в них есть свойство contentDocument. |
tpb12 > 09-11-2009 12:30:52 |
Elexander пишет
Приветствую всех! Попробовал запросить все три интерфейса для sidebar следующим образом (подставляя нужный интерфейс): nsCOMPtr<nsIDOMHTMLObjectElement> htmlobj; Во всех трех случаях получил NS_FAILED(rv). Сам sidebar - это: nsCOMPtr<nsIDOMElement> sidebar; Возможно, я что-то делаю не так, подскажите, pls., кто может. |
Elexander > 13-11-2009 18:29:49 |
Вероятно, contentDocument - это XBL-свойство sidebar. В таком случае я бы вызывал JavaScript из XPCOM. Для этого нужно реализоть на JS объект со всем необходимым функционалом и передать ссылку на него в XPCOM-компонент. JavaScript: Выделить код Код:var CallbackObject = { getSidebarURL: function() { return sidebar.contentDocument.location.href; } } var Component = Components.classes["@example.com/component;1"] .createInstance().QueryInterface(Components.interfaces.IMyInterface); Component.setCallback(CallbackObject); IDL: Выделить код Код:[scriptable, uuid(8CECF414-495D-48FF-BEC4-F4ED2809AAEC)] interface ICallbackObject : nsISupports { AString getSidebarURL(); }; [scriptable, uuid(90758A97-A6F3-4ea4-8953-16BD2EE3A977)] interface IMyInterface : nsISupports { void setCallback(in ICallbackObject aCallback); }; После вызова setCallback в компоненте можна запоминать и использовать интерфейс ICallbackObject. |
tpb12 > 16-11-2009 18:43:39 |
Elexander пишет
Что-то у меня при вызове Java-функции из С++ происходит падение. Т.е я в setCallback запоминаю адрес объекта и затем делаю вызов object->getSidebarURL() - падение. Может быть у тебя есть какой-нибудь работающий пример (или кусок примера) ? Буду премного благодарен. |
Elexander > 17-11-2009 17:51:33 |
Мы с вами не знакомы, так что давайте "на вы". |