Страницы: 1
Добрый день, уважаемые специалисты!
Проблема в следующем. Пишу на С++ XPCOM, а точнее переписываю на плюсах скриптовый код для запуска sidebar-а. Все шло хорошо, пока я не наткнулся на следующий код:
например - if (sidebar.contentDocument.location.href != url)
sidebar - это nsCOMPtr<nsIDOMElement> sidebar; получается он так:
document->GetElementById( nsString(L"sidebar"), getter_AddRefs(sidebar))))
а что такое contentDocument (бывает еще contentWindow) ? Как его получить? Перерыл весь интернет, ничего толком не нашел.
Заранее спасибо.
Отсутствует
Попробуйте через QueryInterface попросить у sidebar один из этих интерфейсов.
Только в них есть свойство contentDocument.
Отсутствует
Попробуйте через QueryInterface попросить у sidebar один из этих интерфейсов.
Только в них есть свойство contentDocument.
Приветствую всех!
Попробовал запросить все три интерфейса для sidebar следующим образом (подставляя нужный интерфейс):
nsCOMPtr<nsIDOMHTMLObjectElement> htmlobj;
nsresult rv = sidebar->QueryInterface(NS_GET_IID(nsIDOMHTMLObjectElement), getter_AddRefs(htmlobj));
Во всех трех случаях получил NS_FAILED(rv).
Сам sidebar - это:
nsCOMPtr<nsIDOMElement> sidebar;
document->GetElementById( nsString(L"sidebar"), getter_AddRefs(sidebar));
Возможно, я что-то делаю не так, подскажите, pls., кто может.
Отсутствует
Вероятно, 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.
Отсутствует
Вероятно, contentDocument - это XBL-свойство sidebar. В таком случае я бы вызывал JavaScript из XPCOM. Для этого нужно реализоть на JS объект со всем необходимым функционалом и передать ссылку на него в XPCOM-компонент.
После вызова setCallback в компоненте можна запоминать и использовать интерфейс ICallbackObject.
Что-то у меня при вызове Java-функции из С++ происходит падение. Т.е я в setCallback запоминаю адрес объекта и затем делаю вызов object->getSidebarURL() - падение. Может быть у тебя есть какой-нибудь работающий пример (или кусок примера) ? Буду премного благодарен.
Отсутствует
Мы с вами не знакомы, так что давайте "на вы".
Примера нет. Но если приведете минимальный код в котором наблюдается падение, может еще чем-то смогу помочь.
Вот еще: http://groups.google.ru/group/netscape. … um=3&pli=1. Там с примером и детально.
Отсутствует
Страницы: 1