>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Разработка http://forum.mozilla-russia.org/viewforum.php?id=18 >открыть окно XUL и получить возможность управлять xul содержимым http://forum.mozilla-russia.org/viewtopic.php?id=32100 |
lemax > 06-03-2009 14:39:29 |
XPCOM компонент на С++. В этом коде nsIWindowWatcher::OpenWindow возвращает nsIDOMWindow, через который не удается влиять на xul элементы: Выделить код Код:nsCOMPtr<nsIServiceManager> servMan; nsresult rv = NS_GetServiceManager(getter_AddRefs(servMan)); NS_ENSURE_SUCCESS (rv, 1); nsCOMPtr<nsIWindowWatcher> window; rv = servMan->GetServiceByContractID("@mozilla.org/embedcomp/window-watcher;1", NS_GET_IID(nsIWindowWatcher), getter_AddRefs(window)); NS_ENSURE_SUCCESS (rv, 2); nsCOMPtr<nsIDOMWindow> domWindow; rv=window->OpenWindow(nsnull,"chrome://ext/content/file.xul","Name","dialog=no,chrome,centerscreen,scrollbars=yes,resizable=yes",nsnull,getter_AddRefs(domWindow)); NS_ENSURE_SUCCESS (rv, 7); |
lemax > 07-03-2009 17:42:20 |
Может кто скажет: P.S: Понять природу хотелось бы |
Ёсъ > 08-07-2009 21:04:13 |
Пытаюсь сделать тоже самое, вызвать диалог из c++. Но я пошёл другим путём: Выделить код Код:nsCOMPtr<nsIWebBrowser> pBrowser (do_GetService("@mozilla.org/embedding/browser/nsWebBrowser;1")); nsCOMPtr<nsIDOMWindow> domWindow; pBrowser->GetContentDOMWindow(getter_AddRefs(domWindow)); nsCOMPtr<nsIDOMWindowInternal> domWindowInt; domWindowPrivate->GetPrivateRoot(getter_AddRefs(domWindowInt)); а уже из domWindowInt пытаюсь вызвать openDialog(.....); но проблема в строке с методом GetContentDOMWindow, после неё domWindow нуловый. |
lemax > 15-07-2009 14:37:42 |
Ёсъ пишет
Попробуем так https://developer.mozilla.org/en/Mozilla_embedding_APIs_overview Выделить код Код:nsresult rv; nsCOMPtr<nsIBaseWindow> baseWindow; nsCOMPtr<nsIWebBrowser> webBrowser; // Create a nsWebBrowser instance... webBrowser = do_CreateInstance(NS_WEBBROWSER_CONTRACTID, &rv); if (NS_FAILED(rv)) return rv; // Give the WebBrowser a pointer to the embedding component which // implements the callback interfaces. Replace 'this' with // an appropriate object... rv = webBrowser->SetContainerWindow((nsIWebBrowserChrome*)this); if (NS_FAILED(rv)) return rv; baseWindow = do_QueryInterface(webBrowser); // Initialize the WebBrowser with a native parent window // (ie. HWND on Win32). Replace 'nativeWindow' with a // reference to an appropriate native resource... rv = baseWindow->InitWindow(nativeWindow, // Native window nsnull, // Always nsnull. x, y, cx, cy); // Initial dimensions... if (NS_FAILED(rv)) return rv; // Create the child window for the WebBrowser. rv = baseWindow->Create(); if (NS_FAILED(rv)) return rv; // At this point webBrowser contains the new initialized instance // of the nsWebBrowser component... // Save webBrowser before it goes out of scope :-) |
Ёсъ > 27-07-2009 18:00:03 |
спасибо, lemax, за помощь. резюмирую. получилось сделать двумя способами: 2. а так меня всё устроило: win->OpenDialog( далее, обрабатываю параметры полученные из диалога. |