Пытаюсь сделать тоже самое, вызвать диалог из 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 нуловый.
может кто-нибудь знает в чём проблема?
Попробуем так https://developer.mozilla.org/en/Mozilla_embedding_APIs_overview
[code] 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
…А что ваш скрипт делает на чужом сайте?
Ага, тег DIV закрой
https://developer.mozilla.org/en/NSPR_API_Reference/Threads
Как узнать? Thread еще работает, или уже нет (просто узнать, не блокируясь PR_JoinThread -ом)?
<script language="javascript">
function w() {
var w = window.open('test2.html');
window.focus();//w.blur();
return true;
}
</script>
а как можно сделать это средствами самого броузера firefox?
К чему такие крайности?
Отправляйте не GET-ом, а POST-ом.
А на сервере надо выполнить команду urldecode (Будь остарожен при работе с базой данных и тому подобное) http://www.php.su/functions/?f=urldecode&choice=info
И все станет на свои места.
Наверное uri не может содержать такой символ, но может содержать символ "%" и циферки. Кстати, благодаря этому можно и ироглифы в uri писать
Судя по вашему вопросу, вы не знакомы с XUL и его тегом <overlay>.
Постарайтесь найти в своем коде что то типа
<overlay ... xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" ...>
...
<toolbox ... id="navigator-toolbox" ...>
...
<toolbar id="идентификатор Вашего тулбара" collapsed="false">
...
</toolbox>
...
</overlay>
Предположу, что:
1) Вероятней всего http://php.su/functions/?cat=exec
Типа
Также учитывайте, что в безопасном режиме вы должны учесть директиву safe_mode_exec_dir
2) Быть может ваше
echo exec(“whoami”);
превращается во что-то типа
echo exec(“C: //Program%20Files/Server/whoami”);
Подключиться к пайпу получилось - см ссылку по теме выше;
Смотрим выше:
http://forum.mozilla-russia.org/viewtopic.php?id=19899
но предложенный там вариант не работает (возникает ошибка настроке с initWithPath - не может найти путь к файлу).
Сударь, определитесь.
А по поводу
try-catch
Так у вас там ошибка между 5 и 6 строкой. Вы вызываете не тот компонет.
Печально, если так... Мне-то как раз надо, чтобы dll всегда подгружалась, поскольку я использую ее для взаимодействия с внешним приложением. Т.е. мне не требуется вызывать ее интерфейсы из браузера. Может быть, все-таки есть способ заставить ее грузиться всегда?
Очень даже весело.Только если это было бы не так, то и для FF было бы "BHO" как в IE.
И оно есть! Поэтому, те кто пишут, что IE опасен своим BHO и поэтому FF лучше - заблуждаются.
Если вы осилите (и поймете) эту статью (всю) http://www.mozilla.org/projects/xpcom/book/cxc/html/newbookTOC.html , то на этот форум будете заходить реже :( .
Здесь используется nsICategoryManager для регистрации xpcom-startup.
Чтобы найти путь к файлу, нужно начать поиск с начала координат, например директории "Рабочий стол".
Тогда в коде программы для WINAPI SHGetSpecialFolderPath будет CSIDL_DESKTOP,
а для расширеня FF адрес файла будет начинаться со слов "Desktop/1.txt"
r.onload=function (ev)
А Это откудого взято?
http://ru.wikipedia.org/wiki/XMLHttpRequest
Бери, не промахнешся (если только для FF, то выкинь часть кода для IE)
[code]var req;
function loadXMLDoc(url)
{
req = null;
if (window.XMLHttpRequest) {
try {
req = new XMLHttpRequest();
} catch (e){}
} else if (window.ActiveXObject) {
try {
req = new ActiveXObject('Msxml2.XMLHTTP');
} catch (e){
try {
req = new ActiveXObject('Microsoft.XMLHTTP');
} catch (e){}
}
}
if (req) {
req.onreadystatechange = processReqChange;
req.open("GET", url, true);
req.send(null);
}
}
function processReqChange()
{
try { // Важно!
// только при состоянии "complete"
if (req.readyState == 4) {
// для статуса "OK"
if (req.status == 200) {
// обработка ответа
} else {
alert("Не удалось получить
Первый раз она подгружалась для регистрации.(наверно)
После регистрации FF знает, что в такой-то DLL есть такие-то компоненты.
Теперь эта библиотека будет подгружена, только если ты вызовиш нужный интерфейс, или чего то там еще.
Вызовиш,например, из javascript.
Если данных мало, и они не накапливаются, то nsIPrefBranch (что то вроде реестра виндоус, только для всех операционных систем). Записи в этом "реестре" можно увидеть по адресу about:config
Иначе: nsILocalFile. Просто записывать в общий фаил.
Может кто скажет:
Как с помощью С++ можно "построить" диалоговое окно браузера FireFox?
P.S: Понять природу хотелось бы
for(var i=0;this.points.length; i++)
Но не очень понятно, где найти этот интерфейс (в XUL-Runner 1.9 такого header-файла нет).
nsISessionStore Этот интерфейс является не окончательным (unfrozen - не замороженный). Поэтому в SDK не создан *.h (nsISessionStore.h ) фаил. Его можно собрать из фаила *.idl (nsISessionStore.idl).
Для создания nsISessionStore.h используется програмка (sdk/bin/XPIDL.exe).
Что то вроде этого:
<путь до sdk/bin>/XPIDL.exe -m header -L"<путь до sdk/idl>" "<путь до nsISessionStore.idl>/nsISessionStore.idl"
В результате будет создан В ТЕКУЩЕЙ ДИРЕКТОРИИ header фаил (nsISessionStore.h)
Но есть вероятность, что этот интерфейс изменится в следующих версиях, и тогда ... :sick:
XPCOM компонент на С++.
Как открыть диалоговое окно xul( window.openDialog(.....,args) ), но из С++?
Как, потом, получить возможность влиять на внешний вид окна (влиять на xul элементы окна)?
В этом коде 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 пишетЭто событие срабатывает и при загрузки <iframe>
а iframe это не dom-документ?
в обработчике нужно написать что-то вроде:
Выделить кодКод:
var doc = event.originalTarget; var win = doc.defaultView; if(win.parent != win) return;
Я так и поступил. Думал проще будет решение
function newurl (e) { try { var doc=e.originalTarget; var tmp_doc=null; if(doc instanceof HTMLDocument && doc.location.href.indexOf("http")==0) { for(var i=0;(tmp_doc=gBrowser.browsers.item(i))!=null && tmp_doc.contentDocument!=doc;i++){};// Это я здесь перебираю все вклади браузера. И сравниваю их с документом, вызвавшим событие if(tmp_doc!=null ) { } } } catch(event) { alert("Exep newUrl="+event) } }
Это событие срабатывает и при загрузки <iframe>
Тогда зачем нужен DOMFrameContentLoaded ?
из https://developer.mozilla.org/en/Gecko-Specific_DOM_Events
И как как получить событие загрузки только сайта?
Спасибо
1) Как в массиве javascript в качестве ключа применить переменную типа "XUL Element"?
2) Каждый элемент DOMa имеет свой ID. Если его не указать явно, то система создает свой. Если я прав, то как получить реальный ID
элемента, не указанного явно в атрибутах.
Спасибо,
Хочу: Для каждого нового элемента <browser> из <tabbrowser> создавать специальный объект javascript. По закрытии вкладки браузера удалять специалный объект,
Типа
[code]var Ext_PRG=
{
jc : [], //массив хронящий специальный объект для каждой вкладки браузера "<browser>"
init : function()
{
this.jc=[];
gBrowser.tabContainer.addEventListener("TabOpen",Ext_PRG.tabsChanged,false);
gBrowser.tabContainer.addEventListener("TabClose",Ext_PRG.tabsChanged,false);
Ext_PRG.addTabBrowser(gBrowser.selectedBrowser);
},
uninit : function()
{
gBrowser.tabContainer.removeEventListener("TabOpen",Ext_PRG.tabsChanged,false);
gBrowser.tabContainer.removeEventListener("TabClose",Ext_PRG.tabsChanged,false);
Ext_PRG.delTab
:D Сначало сам озадачился вопросом. Но...
window.addEventListener("focus",function(){alert("FOCUS")},false); window.addEventListener("blur",function(){alert("BLUr")},false);
Это была суть решения, а теперь решение
var IsWindowActive;//глобальная window.addEventListener("focus",function(){IsWindowActive=true;},false); window.addEventListener("blur",function(){IsWindowActive=false;},false);
Спасибо. Идея работает.