Если его поместить в CODE, то , нажимая на кнопку, я получаю маленькие квадратики слева (рис в предыдущем посте). Как их убрать?
Перенеси код из CODE в Инициализацию.
Отсутствует
Перенеси код из CODE в Инициализацию.
Не годится.
Мне нужно, чтобы инициализация прошла с первым кликом, а не с открытием браузера.
Попытался втиснуть в инициализацию запуск всего этого хозяйства по клику. Но и здесь появились квадратики.
Что они означают?
Отсутствует
Это все в продолжение темы о получении данных с удаленной PHP-страницы
Ситуация такая: юзер заходит на сайт, вводит свои данные. Для него в недрах сайта генерируется спец страница, к которой подключается плагин для получения данных для заполнения форм.
При первоначальной инициализации кнопка ничего не получит. т.к. юзер еще не залогинен и страница пуста (или шаблонна).
Поэтому кнопка должна инициализироваться после пользовтаельского логина и/или после нажатия по ней.
Отсутствует
Сори, вот полный код , с получение данных из удаленного файла
var advdata = new XMLHttpRequest(); var catalog = 'http://mysite.com/.../myfile.php'; advdata.open('GET', catalog , false); advdata.overrideMimeType("text/plain; charset=x-user-defined"); advdata.send(); if (advdata.status === 200) { data = advdata.responseText.split("\n"); //массив данных } //назначем переменные из полученного массива var text0 = data[0]; var text1 = data[1]; var text2 = data[2]; this.appendChild(parseFromXML( <menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" oncommand="this.parentNode.insertText(event.target.getAttribute('cb_text'));"> <menuitem cb_text={text0} label="Мой текст 0" /> <menuitem cb_text={text1} label="Мой текст 1" /> <menuitem cb_text={text2} label="Мой текст 2" /> </menupopup> )); function parseFromXML(xml) { var pp = XML.prettyPrinting; XML.prettyPrinting = false; var elt = new DOMParser().parseFromString(xml.toXMLString(), "application/xml").documentElement; XML.prettyPrinting = pp; return elt; } this.type = "menu"; this.orient = "horizontal"; this.insertText = function(str) { var command = "cmd_insertText"; var controller = document.commandDispatcher.getControllerForCommand(command); if(controller && controller.isCommandEnabled(command)) { controller = controller.QueryInterface(Components.interfaces.nsICommandController); var params = Components.classes["@mozilla.org/embedcomp/command-params;1"] .createInstance(Components.interfaces.nsICommandParams); params.setStringValue("state_data", str); controller.doCommandWithParams(command, params); } };
Отсутствует
AlexandrDa
а зачем такой извращённый способ вывода? или предполагается потом кликать на пункты вызывая какието действия?
если кликать не требуется то есть варианты с тултипом, со всплывающим сообщением, можно выводить текст прямо на кнопку
если нужен клик то попробую глянуть что там можно сделать
Приспособил под себя тот код, который нашел здесь.
Кликая на пункты ниспадающего меню, я выбираю нужные слова-фразы, которые требуется вставить в форму. Эти слова-фразы находятся на удаленной странице , генерируются под конкретного юзера.
Удобно при ручном заполнении веб-форм, когда работают разные пользователи.
Отсутствует
Квадратики, которые я скриншотнул в посте http://forum.mozilla-russia.org/viewtopic.php?pid=605276#p605276 возникают при повторном объявлении одной и той же функции, что фактически означает ошибку.
Отсутствует
AlexandrDa
а зачем такой извращённый способ вывода? или предполагается потом кликать на пункты вызывая какието действия?
если кликать не требуется то есть варианты с тултипом, со всплывающим сообщением, можно выводить текст прямо на кнопку
если нужен клик то попробую глянуть что там можно сделать
А есть где-нибудь код, аналогичный этому http://forum.mozilla-russia.org/viewtop … 57#p428857 , но без меню, а с одной переменной, которая будет вводиться в поле формы?
В моем случае, скорее всего, кнопка с меню на основе XML инициализируется единожды и более не подлежит изменениям. Поэтому пункты меню априори не могут вставлять другой текст, чем тот, который появился после инициализации.
Поэтому остается вариант установки ряда кнопок, каждая вставляет свой текст.
Отсутствует
AlexandrDa
кидаем это в секцию код, прокручиваем страницу форума вверх чтоб видеть поле поиска
жмём на кнопку смотрим результат
аналогичным способом можно указать несколько полей одновременно.Выделить кодКод:
alert("первый способ"); window.content.document.getElementById('search-input').value="ololo"; alert("второй способ"); var sf=window.content.document.getElementsByTagName('input'); for (var i = 0; i < sf.length ; i++){ if (sf[i].name=="keywords"){sf[i].value="trololo"}; }; alert("третий способ"); var url="https://sendsms.megafon.ru/"; getBrowser (). selectedTab = getBrowser (). addTab (url); alert("Дождитесь открытия страницы.пример вставки нескольких значений"); window.content.document.getElementById('addr').value="12345"; window.content.document.getElementById('message').value="Пример вставленного текста, а также установившегося чекбокса ниже"; window.content.document.getElementById('transliterate').checked=true;
Круто!
А как, чтобы текст вставлялся только на место мигающего курсора? Ведь я не всегда знаю айди элементов тех форм, которые предстоит заполнять.
Отсутствует
bunda1
Попробовал переделанную кнопку Translate
Лучше спросить у знающих - чем лезть не зная.
Отсутствует
там всё есть. смотри подборку работа с текстом
Да, точно! Из-за обилия информации я не изучил эту ветку. Благодарю!
И я практически разобрался со своей первоначальной задачей. Но она начинает работать со второго клика.
Рассказываю подробнее.
Понравился мне код (http://forum.mozilla-russia.org/viewtop … 66#p576766):
меню(1 вариант) пример(в инициализацию) (удалите отмеченные комментарии для корректной работы) var menu = <menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" oncommand="this.parentNode.getselvalue(event)"> <menuitem value="Значение1" label="Текст пункта меню 1"/>//удалить! -вся строка пункт меню добавляется копированием ниже, label- текст пункта меню,value - значение которое будет передаваться при выборе <menuitem value="Значение2" label="Текст пункта меню 2"/> <menuseparator/> //удалить! - разделитель <menuitem value="Значение3" label="Текст пункта меню 2"/> </menupopup>; menu = custombuttonsUtils. makeXML (menu); menu. childNodes [3]. setAttribute ("checked", "true"); this. orient = "horizontal"; this. type = "menu"; this. appendChild (menu); //------------------------------------------------------- this. getselvalue = function (event) { var selval = event. target. getAttribute ("value"); // selval - выбранное значение меню, далее обрабатываем его alert(selval); };
Я его разрезал на две части. Верхнюю оставил в инициализации, а нижнюю - в код (резал по линии //-------------------------------------------------------)
Идея такова: После инициализации меню отдает свои значения в КОД. Я их использую как ключи к массиву данных, ранее загруженных с веб-страницы.
При каждом клике на кнопке выполняется код загрузки страницы с записью строк в массив. Из выпадающего меню я получаю ключи и вывожу на алерт.
А теперь, внимание, вопрос.
Уважаемые гуру, почему только при втором клике на пункте меню я получаю alert(selval); ?
Как заставить его реагировать на первый клик?
UPD: сам себе отвечаю:
убрать обаработчик
Оставить в коде только
var selval = event. target. getAttribute ("value"); // selval - выбранное значение меню, далее обрабатываем его alert(selval);
Отредактировано AlexandrDa (14-03-2013 19:22:09)
Отсутствует
Хотелось бы чисто для себя чуть изменить, привязать всплывающее окно к выделенному тексту, сейчас оно появляется в правом нижнем углу, размер шрифта для меня трудно читаем, может в коде как вручную выставлять, или привязать к шрифту на странице, что легче реализовать. Ну и возможность в коде поменять фон окна, белый уж очень резкий, особенно по ночам. Если все это конечно не заморочисто. Спасибо.
Сделаю когда на это время будет.
Отсутствует
villa7
Может быть пока так подойдёт, если вообще будет работать конечно
dataURL += ruHTML + '</body></html>'; var sizeX = screen.width/2.2 var sizeY = screen.height/2.2 var posX = screen.width-sizeX; var posY = screen.height-sizeY;
на
dataURL += '<style>body { background-color: rgb(230,230,230); font-size: 20px }</style>'; dataURL += ruHTML + '</body></html>'; var sizeX = screen.width/2.2 var sizeY = screen.height/2.2 var fWin = document.commandDispatcher.focusedWindow; var bcr = fWin.getSelection().getRangeAt(0).getBoundingClientRect(); var posX = fWin.mozInnerScreenX + bcr.left; var posY = fWin.mozInnerScreenY + bcr.bottom + 3;
Отредактировано Dumby (15-03-2013 02:31:58)
Отсутствует
bunda1
Ну так на такой случай villa7 нам никаких пожеланий не оставил, только скриншот и
Хотелось бы чисто для себя чуть изменить, привязать всплывающее окно к выделенному тексту
Отсутствует
Ну так на такой случай villa7 нам никаких пожеланий не оставил, только скриншот
Я имел ввиду как в этой кнопке
Лучше спросить у знающих - чем лезть не зная.
Отсутствует
Я имел ввиду как в этой кнопке
Ууу, там сложно и совсем по-другому.
Но, вроде получилось, чтобы окошко за экран не вылезало
dataURL += ruHTML + '</body></html>'; var sizeX = screen.width/2.2 var sizeY = screen.height/2.2 var posX = screen.width-sizeX; var posY = screen.height-sizeY; var win = window.open(dataURL, "", "width="+(sizeX-30)+", height="+(sizeY-87)+", screenX="+posX+", screenY="+posY+", status=no, scrollbars=yes,resizable=yes");
Замена:
dataURL += '<style>body { background-color: rgb(230,230,230); font-size: 20px }</style>'; dataURL += ruHTML + '</body></html>'; var width = (0) || (0.4) * gBrowser.boxObject.width; var height = (0) || (0.4) * gBrowser.boxObject.height; var fWin = document.commandDispatcher.focusedWindow; var bcr = fWin.getSelection().getRangeAt(0).getBoundingClientRect(); var posX = fWin.mozInnerScreenX + bcr.left; var posY = fWin.mozInnerScreenY + bcr.bottom + 3; var deltaX = posX + width - (fullScreen ? screen.width : screen.availWidth); if (deltaX > 0) posX -= deltaX; var deltaY = posY + height - (fullScreen ? screen.height : screen.availHeight); if (deltaY > 0) posY -= deltaY; var win = window.open(dataURL, "", "outerWidth="+width+", outerHeight="+height+", screenX="+posX+", screenY="+posY+", status=no, scrollbars=yes, resizable=yes");
Отредактировано Dumby (15-03-2013 14:33:04)
Отсутствует
Dumby
Погонял Вашу переделку, это то что надо, и окошко рядом появляется и цвет фона можно поменять и размер шрифта увеличить, просто супер. Спасибо Вам за труды ну и bunda1 конечно тоже. Единственное не пойму как можно первоначально всплывающее окно чуть увеличить, шрифт у меня крупный помещается мало, приходится вручную растягивать, а положение не запоминается.
Лучше спросить у знающих - чем лезть не зная.
Отсутствует
villa7
Ну смотри: в коде «Замены» есть две строчки (про ширину и про высоту)
var width = (0) || (0.4) * gBrowser.boxObject.width; var height = (0) || (0.4) * gBrowser.boxObject.height;
Отсутствует
В продолжение темы о заполнении полей форм: как на счет зависимых списков и джаваскрипт-событий? Я пока не экспериментировал плотно с этим, но предполагаю, что это отдельная нетривиальная задача.
Отсутствует
Попробовал это на портабельном фоксе, и правда - работает. Спасибо всем участникам топика.
custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname/%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgID/gICA/4CAgP+AgID/uIJN/4CAgP+AgID/gICA/4CAgP+AgID/gICA/4CAgP+AgID/gICA/4CAgP+AgID/gICA/////////////////7iCTf//////////////////////////////////////////////////////gICA/4CAgP////////////////+4gk3//////////////////////////////////////////////////////4CAgP+AgID/////////////////uIJN//////////////////////////////////////////////////////+AgID/gICA/////////////////7iCTf//////////////////////////////////////////////////////gICA/4CAgP////////////////+4gk3//////////////////////////////////////////////////////4CAgP+AgID/////////////////uIJN/7iCTf+4gk3/uIJN/7iCTf+4gk3/uIJN/7iCTf+4gk3/uIJN/7iCTf+4gk3/gICA/////////////////7iCTf8A////AP///wD///+4gk3/uIJN/7iCTf+4gk3/uIJN/7iCTf+4gk3/uIJN/4CAgP////////////////+4gk3/AP///wD///8A////uIJN/7iCTf+4gk3/uIJN/7iCTf+4gk3/uIJN/7iCTf+AgID/////////////////uIJN/7iCTf+4gk3/uIJN/7iCTf+4gk3/uIJN/7iCTf+4gk3/uIJN/7iCTf+4gk3/gICA////////////////////////////////////////////////////////////////////////////gICA/4CAgP///////////////////////////////////////////////////////////////////////////4CAgP+AgID/gICA/4CAgP+AgID/gICA/4CAgP+AgID/gICA/4CAgP+AgID/gICA/4CAgP+AgID/gICA/4CAgP+AgID/gICA/////////////////4CAgP+AgID/gICA/4CAgP+AgID/gICA/4CAgP+AgID/gICA/4CAgP+AgID/gICA/4CAgP////////////////+AgID/gICA/4CAgP+AgID/gICA/4CAgP+AgID/gICA/4CAgP+AgID/gICA/4CAgP+AgID/gICA/4CAgP+AgID/gICA/4CAgP+AgID/gICA/4CAgP+AgID/gICA/4CAgP+AgID/gICA/4CAgP+AgID/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bvar%20wins%20%3D%20%5B%5D%3B%0Afunction%20getWins%28%29%20%7B%0A%09var%20en%20%3D%20Services.ww.getWindowEnumerator%28%29%3B%0A%09while%28en.hasMoreElements%28%29%29%20%7B%0A%09%09var%20w%20%3D%20en.getNext%28%29.document.documentElement%3B%0A%09%09var%20id%20%3D%20w.getAttribute%28%22id%22%29%3B%0A%09%09if%20%28id%20%26%26%20wins.indexOf%28id%29%20%3C%200%29%20wins.push%28id%29%3B%0A%09%7D%0A%09return%20wins%3B%0A%7D%0Afunction%20appendNode%28nodeName%2C%20attrs%2C%20parent%29%20%7B%0A%09var%20node%20%3D%20document.createElement%28nodeName%29%3B%0A%09for%28var%20attr%20in%20attrs%29%20node.setAttribute%28attr%2C%20attrs%5Battr%5D%29%3B%0A%09parent.appendChild%28node%29%3B%0A%09return%20node%3B%0A%7D%0Aconst%20filter%20%3D%20%22*.ico%22%3B%0Aconst%20fp%20%3D%20Cc%5B%22@mozilla.org/filepicker%3B1%22%5D.createInstance%28Ci.nsIFilePicker%29%3B%0Afp.appendFilter%28%22%22%2C%20filter%29%3B%0A%0Avar%20dir%20%3D%20Cc%5B%27@mozilla.org/file/directory_service%3B1%27%5D%0A%09.getService%28Ci.nsIProperties%29%0A%09.get%28%22CurProcD%22%2C%20Ci.nsILocalFile%29%3B%0A%0Avar%20steps%20%3D%20%5B%22chrome%22%2C%20%22icons%22%2C%20%22default%22%5D%3B%0Asteps.forEach%28function%28step%29%20%7B%0A%09dir.append%28step%29%3B%0A%09if%20%28%21dir.exists%28%29%20%7C%7C%20%21dir.isDirectory%28%29%29%20dir.create%28dir.DIRECTORY_TYPE%2C%20511%29%3B%0A%7D%29%3B%0Athis.openDir%20%3D%20function%28%29%20%7B%0A%09dir.reveal%28%29%3B%0A%7D%0Athis.setIcon%20%3D%20function%28id%29%20%7B%0A%0A%09fp.init%28window%2C%20%22%22%2C%20fp.modeOpen%29%3B%0A%09if%20%28fp.show%28%29%20%21%3D%20fp.returnOK%29%20return%3B%0A%0A%09var%20file%20%3D%20fp.file%3B%0A%09var%20name%20%3D%20file.leafName%3B%0A%09var%20ext%20%3D%20name.substring%28name.lastIndexOf%28%22.%22%29%29%3B%0A%09file.copyTo%28dir%2C%20id%20+%20ext%29%3B%0A%7D%0Aconst%20id%20%3D%20this.id%3B%0A%0Avar%20popup%20%3D%20appendNode%28%22menupopup%22%2C%20%7B%0A%09id%3A%20id%20+%20%22-popup%22%2C%0A%09position%3A%20%22after_start%22%2C%0A%09onpopuphidden%3A%20%22this.parentNode.removeChild%28this%29%3B%22%0A%7D%2C%20this%29%3B%0A%0AappendNode%28%22menuitem%22%2C%20%7B%0A%09id%3A%20id%20+%20%22-menuitem-opendir%22%2C%0A%09label%3A%20%22Open%20Folder%22%2C%0A%09oncommand%3A%20%22this.parentNode.parentNode.openDir%28%29%3B%22%0A%7D%2C%20popup%29%3B%0A%0AappendNode%28%22menuseparator%22%2C%20%7B%20id%3A%20id%20+%20%22-separator1%22%20%7D%2C%20popup%29%3B%0A%0AgetWins%28%29.forEach%28function%28wId%29%20%7B%0A%09appendNode%28%22menuitem%22%2C%20%7B%0A%09%09id%3A%20id%20+%20%22-menuitem-%22%20+%20wId%2C%0A%09%09label%3A%20wId%2C%0A%09%09oncommand%3A%20%27this.parentNode.parentNode.setIcon%28this.getAttribute%28%22label%22%29%29%3B%27%0A%09%7D%2C%20popup%29%3B%0A%7D%29%3B%0Apopup.openPopup%28this%29%3B%0A//gClipboard.write%28%27%22%27%20+%20getWins%28%29.join%28%27%22%2C%20%22%27%29%20+%20%27%22%27%29%3B%0A%0A%0A%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E
Отредактировано Dumby (18-03-2013 19:27:35)
Отсутствует