alert($('wearherIfr').scrollTo); выдает undefined
Это метод окна, а не iframe, соответственно iframe. contentWindow. scrollTo
Кстати, если верить http://www.xulplanet.com/references/xpcomref/ifaces/nsIDOMNSHTMLElement.html у DOM-элементов есть метод scrollIntoView - наверное, можно просто найти этот элемент в документе iframe и позвать этот метод.
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Добрый день ! Хочу сделать плагин который будет собирать статистику по активности браузера на основе движка cnstat (думаю всем известный движок). В плагин требуется установить код который предоставляет cnstat
<!-- CNStats begin -->
<span id="cnstats_span"><script type="text/javascript">
cnsd=document;
cnst=escape(cnsd.title);
cnst=cnst.replace(/\+/g,'%2B');
cnsa=navigator.appName;
cnsn=(cnsa.substring(0,2)=='Mi')?0:1;
cnss=screen;cnspx=(cnsn==0)?cnss.colorDepth:cnss.pixelDepth;
if (cnsd.getElementById)
{
var i=cnsd.createElement('img');
var amp=String.fromCharCode(38);
var iurl='http://stat/cnt-gif1x1.php?';
iurl+='e='+cnss.width+'.'+cnss.height;
iurl+=amp+'d='+cnspx+amp+'r='+escape(cnsd.referrer);
iurl+=amp+'p='+escape(cnsd.location)+amp+'t='+cnst;
i.src=iurl;
i.width=1;i.height=1;i.border=0;
cnsd.getElementById('cnstats_span').appendChild(i);
}
</script></span><noscript><img src="http://stat/cnt-gif1x1.php?468&c=0" width="1" height="1" border="0" alt="" /></noscript>
<!-- CNStats end -->
Нужно чтоб скрипт срабатывал каждый раз как произойдет DOMContentLoaded. Не соображу как это сделать. Либо подключать в плагин удаленный html который будет лежать на сервере, либо как то это код внедрить в плагин....... оч буду благодарен за помощь.
Желательно решение с использованием события DOMContentLoaded
Отредактировано dima9111 (03-06-2009 12:18:34)
Отсутствует
dima9111
можно ли конвртировать Greasemonkey в независимый плагин?
В смысле? А сейчас он какой?
Или речь про написанный в нём скрипт?
--- ---
Отсутствует
dima9111, можно попробовать http://arantius.com/misc/greasemonkey/script-compiler
Отсутствует
Каким способом лучше добавть ява код от гугл аналитик в firefox
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-9464160-1");
pageTracker._trackPageview();
} catch(err) {}</script>
п?
Отсутствует
Хочу создать собственный журнал посещений с использованием sqlite. Но не могу разобраться с принципами работы с sqlite на javascript. Если есть инф-я по этому поводу, подскажите. буду очень признательна (какие именно ф-ции в коде мозилы отвечают за считывание/добавление даных в бд places.sqlite?)
Отсутствует
Хочу создать собственный журнал посещений с использованием sqlite. Но не могу разобраться с принципами работы с sqlite на javascript. Если есть инф-я по этому поводу, подскажите. буду очень признательна (какие именно ф-ции в коде мозилы отвечают за считывание/добавление даных в бд places.sqlite?)
https://developer.mozilla.org/en/Storage.
У меня вопрос из той же области (SQLite и JavaScript). Существует таблица (tree).
tag | id | parent_id |
first_level | 1 | 0 |
first_level | 2 | 0 |
second_level | 3 | 2 |
second_level | 4 | 2 |
... statement=connection.createStatement("select * from tree order by parent_id"); my_document=document.implementation.createDocument("http://www.w3.org/1999/xhtml","root",null); my_document.documentElement.setAttribute("id","0"); while (statement.executeStep()){ element=my_document.createElement(statement.row.tag); element.setAttribute("id",statement.row.id); my_document.getElementById(statement.row.parent_id).appendChild(element); } ...
Успешно вставляет первые два элемента (что в корне), но потом их не находит для вставки остальных. Говорит: "TypeError: my_document.getElementById(statement.row.parent_id) is null".
И ещё (другой вопрос по XUL'у). Как заставить элемент "<menulist editable='true'>" выводить только пункты, которые соответствуют тексту, набранному пользователем (как в строке адреса обозревателя)? Нужно писать свою функцию или достаточно эту возможность где-то включить?
Отредактировано Рено Гринлиф (19-12-2009 15:41:03)
Отсутствует
Рено Гринлиф
Успешно вставляет первые два элемента (что в корне), но потом их не находит для вставки остальных. Говорит: "TypeError: my_document.getElementById(statement.row.parent) is null".
Столбец в таблице называется parent_id
Наверное, надо писать my_document.getElementById(statement.row.parent_id).appendChild(element); вместо my_document.getElementById(statement.row.parent).appendChild(element); ?
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Извиняюсь. Опечатку (в сообщении) исправил, ошибка осталась.
Отредактировано Рено Гринлиф (19-12-2009 15:39:58)
Отсутствует
Рено Гринлиф
Извиняюсь. Опечатку (в сообщении) исправил, ошибка осталась.
Причина, как я понял, в том, что createElement создает элементы в namespace отличном от namespace элемента root.
И getElementById ищет элементы, атрибут id которых в том же namespace, что и root.
Так что должно работать
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Благодарю за помощь.
Чуть не устроил себе рекурсию.
Отсутствует
Зравствуйте.
Я пишу первое свое расширение и с JavaSkript-ом только сейчас познаокмился.
Оно по действию пользователя будет анализировать текущую страницу и на другой тсранице выдавать результат.
Делаю это все на основе ReloadEvery 3.6.2 (https://addons.mozilla.org/en-US/firefox/addon/115)
так как с нуля создать пока не получилось.
Там в файле reloadeveryOverlay.xul я добавил
<menuitem id="test_id" label="test_label;" type="checkbox" oncommand="org.mozdev.reloadevery.ShowMainForm(document)"/>
В результате получился в выпадающее меню один пункт который, который вызывает функцию с обработкой из прекрепленнго .js файла
Я все никак не могу получить доступ к данным на текущей html странице.
Следующие команды нормально выдают заголовок, адресс текущей страницы
alert(navigator.appName);
alert(window.document.title);
alert(window.content.location);
Но вот все попытки получить доступ к BODY или каким другим элементам закончились ничем.
alert("document.body.className="+document.body.className); - прекращается выполнение скрипта
var elems = document.getElementsByTagName("img");
alert("elems.length ="+elems.length); - найдено 0 элементов, хотя на странице есть изображения и в исходном коде присутствуют
Так как будут анализироваться произвольные страници, то использовать getElementById() нельзя
window.document.childNodes - исследование показалдо наличие 11 узлов один из которых XULobject, у которого еще 42 узла(но для разных страниц это число одинаково, значит очень сомнительно, что это, то что мне нужно).
alert("window.document.body.innerhtml="+window.document.body.innerhtml); - прекращается выполнение скрипта
alert(window.document.innerhtml) - undefined
alert(window.document.body) - undefined
Подскажите пожалусто как мне получить доступ?
Может я что-то упустил из виду.
Отсутствует
Оказывается я ломился в обьект который содержит выпадающее меню, а не страницу.
Для доступа к текущей странице можно использовать следующий код
var mainWindow = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
.getInterface(Components.interfaces.nsIWebNavigation)
.QueryInterface(Components.interfaces.nsIDocShellTreeItem)
.rootTreeItem
.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
.getInterface(Components.interfaces.nsIDOMWindow);
var body = mainWindow.getBrowser().selectedBrowser.contentDocument.body;
getSelection().selectAllChildren(body);
var doc = window.getSelection().toString();/*Имя doc важно возможно это переход между страницами*/
var elems = body.getElementsByTagName('td');/*Получаем все элементы где тег <td> */
Пока для меня это осталось магическим кодом.
Отсутствует
эта ссылка мне знакома. но все равно спасибо)
по-поводу динамического формирования tree:
-создаешь сначала каркас компонента tree:
<tree flex="1"> <treecols> <treecol id="sender" label="Sender" flex="1"/> <splitter class="tree-splitter"/> <treecol id="subject" label="Subject" flex="2"/> </treecols> <treechildren id="tc"> <script type="application/x-javascript" src="chrome://<package_name>/content/script_name.js"/> </treechildren> </tree>
- файл script_name.js может быть таким:
const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; var tr_ch=document.getElementById("tc"); var i; for (i=0;i<10;i++) { var it=document.createElementNS(XUL_NS, "treeitem"); // create a new XUL treeitem var r=document.createElementNS(XUL_NS, "treerow"); // create a new XUL treerow var cel1=document.createElementNS(XUL_NS, "treecell"); // create a new XUL treecell cel1.setAttribute("label","col1 row"+i); var cel2=document.createElementNS(XUL_NS, "treecell"); // create a new XUL treecell cel2.setAttribute("label","col2 row"+i); tr_ch.appendChild(it); it.appendChild(r); r.insertBefore(cel1,r.cel); r.appendChild(cel2); }
Посмотри. может пригодится
Добавлено 28-01-2010 11:37:32
всем доброго времени суток.
мне интересно: какие события обрабатывает браузер при формировании истории посещений?
добавляет ли он адрес страницы если просто перейти с одной вкладки на другую? или он рассматривает только загрузку новых страниц, в том числе игнорируя событие перезагрузки (обновления) текущей страницы? как он проверяет: успешно ли загружена страница? и т.п. Если кто-то знает ответ или место, где он находится, напишите пожалуйста.
(можно на почту DSvetlanaP@ukr.net)
Отсутствует
Нашла на сайте мозилы код:
var history = Cc["@mozilla.org/browser/nav-history-service;1"]. getService(Ci.nsINavHistoryService); let observer = { onBeginUpdateBatch: function() { }, onEndUpdateBatch: function() { }, onVisit: function(aURI, aVisitID, aTime, aSessionID, aReferringID, aTransitionType) { }, onTitleChanged: function(aURI, aPageTitle) { }, onDeleteURI: function(aURI) { }, onClearHistory: function() { }, onPageChanged: function(aURI, aWhat, aValue) { }, onPageExpired: function(aURI, aVisitTime, aWholeEntry) { }, QueryInterface: function(iid) { if (iid.equals(Components.interfaces.nsINavHistoryObserver) || iid.equals(Components.interfaces.nsISupports)) { return this; } throw Cr.NS_ERROR_NO_INTERFACE; } }; history.addObserver(observer, false);
пробовала вставлять alert("hi"); для проверки срабатывания события onVisit() - не работает.
Не понимаю, ведь observer -это как раз то что мне нужно, в его описании написано, что он используется как
наблюдатель за событиями (истории), а событие onVisit отвечает за посещение новой странички. ведь так?
если знаете в чем дело и понимаете - что я не так делаю, напишите, пож-та.
Отсутствует
вот такой вопрос:
на сайте грузится яваскрипт. я хочу в своём расширении его перехватывать и изменять до того, как этот яваскрипт будет исполнен. для этого я использую код, который нашёл в расширении pirate questing. получаю ошибку:
dump is not defined (ошибка в строке 177 моего файла)
что не так? и вообще - в правильную ли сторону я копаю, или в коде должно быть что-то ещё?
browser.dom.window.dump.enabled установлено в true
(greasemonkey и foxreplace мне не подходят)
try { //largely from firebug. should refactor if (typeof Cc == "undefined") { var Cc = Components.classes; var Ci = Components.interfaces; } if (typeof CCIN == "undefined") { function CCIN(cName, ifaceName){ return Cc[cName].createInstance(Ci[ifaceName]); } } if (typeof CCSV == "undefined") { function CCSV(cName, ifaceName){ if (Cc[cName]) return Cc[cName].getService(Ci[ifaceName]); // if fbs fails to load, the error can be _CC[cName] has no properties else dump("CCSV fails for cName:" + cName); }; } function TracingListener() { //this.receivedData = []; } TracingListener.prototype = { originalListener: null, receivedData: null, // array for incoming data. onDataAvailable: function(request, context, inputStream, offset, count) { var binaryInputStream = CCIN("@mozilla.org/binaryinputstream;1", "nsIBinaryInputStream"); var storageStream = CCIN("@mozilla.org/storagestream;1", "nsIStorageStream"); binaryInputStream.setInputStream(inputStream); storageStream.init(8192, count, null); var binaryOutputStream = CCIN("@mozilla.org/binaryoutputstream;1", "nsIBinaryOutputStream"); binaryOutputStream.setOutputStream(storageStream.getOutputStream(0)); // Copy received data as they come.*/ var data = binaryInputStream.readBytes(count); //var data = inputStream.readBytes(count); this.receivedData.push(data); binaryOutputStream.writeBytes(data, count); this.originalListener.onDataAvailable(request, context,storageStream.newInputStream(0), offset, count); }, onStartRequest: function(request, context) { this.receivedData = []; this.originalListener.onStartRequest(request, context); }, onStopRequest: function(request, context, statusCode) { try { request.QueryInterface(Ci.nsIHttpChannel); dump(request.originalURI.path); if (request.originalURI && request.originalURI.path.indexOf("/api/json/getBootstrapData.do") == 0) { //for(opt in request) { // dump("\nrequest."+opt); //} //dump(request.responseText); var data = null; if(request.requestMethod.toLowerCase() == "post") { var postText = this.readPostTextFromRequest(request,context); if (postText) data = ((String)(postText)).parseQuery(); } //dump("\nProcessing: " + request.originalURI.spec + "\n"); var date = Date.parse(request.getResponseHeader("Date")); var responseSource = this.receivedData.join(); //fix leading spaces bug responseSource = responseSource.replace(/^\s+(\S[\s\S]+)/,"$1"); responseSource = responseSource.replace(/\"testDelay\":8/gm,'"testDelay":0'); } } catch(e) { dump(e);} this.originalListener.onStopRequest(request, context, statusCode); }, QueryInterface: function (aIID) { if (aIID.equals(Ci.nsIStreamListener) || aIID.equals(Ci.nsISupports)) { return this; } throw Components.results.NS_NOINTERFACE; }, readPostTextFromRequest : function(request, context) { try { var is = request.QueryInterface(Ci.nsIUploadChannel).uploadStream; if (is) { var ss = is.QueryInterface(Ci.nsISeekableStream); var prevOffset; if (ss) { prevOffset = ss.tell(); ss.seek(Ci.nsISeekableStream.NS_SEEK_SET, 0); } // Read data from the stream.. var charset = "UTF-8"; var text = this.readFromStream(is, charset, true); // Seek locks the file so, seek to the beginning only if necko hasn't read it yet, // since necko doesn't seek to 0 before reading (at lest not till 459384 is fixed). if (ss && prevOffset == 0) ss.seek(Ci.nsISeekableStream.NS_SEEK_SET, 0); return text; } else { dump("Failed to Query Interface for upload stream.\n"); } } catch(exc) { dump(exc); } return null; }, readFromStream : function(stream, charset, noClose) { var sis = CCSV("@mozilla.org/binaryinputstream;1", "nsIBinaryInputStream"); sis.setInputStream(stream); var segments = []; for (var count = stream.available(); count; count = stream.available()) segments.push(sis.readBytes(count)); if (!noClose) sis.close(); var text = segments.join(""); return text; } } hRO = { observe: function(request, aTopic, aData){ try { if (aTopic == "http-on-examine-response") { request.QueryInterface(Ci.nsIHttpChannel); dump(request.originalURI.path); if (request.originalURI && request.originalURI.path.indexOf("/api/json/getBootstrapData.do") == 0) { var newListener = new TracingListener(); request.QueryInterface(Ci.nsITraceableChannel); newListener.originalListener = request.setNewListener(newListener); } } } catch (e) { dump(e); } }, QueryInterface: function(aIID){ if (aIID.equals(Ci.nsIObserver) || aIID.equals(Ci.nsISupports)) { return this; } throw Components.results.NS_NOINTERFACE; }, }; var observerService = Cc["@mozilla.org/observer-service;1"] .getService(Ci.nsIObserverService); observerService.addObserver(hRO, "http-on-examine-response", false); } catch (e) { dump(e);}
Отредактировано CountZero (16-02-2010 22:27:12)
Отсутствует
Claire
Подозреваю, в начале надо написать
CountZero
А если определить как-нибудь функцию dump ?
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Добрый день всем, никогда не создавал расширения для фф. Не знаю с чего начать. Хочу создать расширения в виде дополнительного меню. Аналог меню Закладки, это для одного форума, чтобы сделать навигации более быстрым.
Отсутствует
Hella
Попробуйте в качестве точки отсчета взять это расширение.
Отсутствует
Claire
Подозреваю, в начале надо написать
CountZero
А если определить как-нибудь функцию dump ?
Разумеется, я это сделала. Все равно не работает. не в этом дело.
Отсутствует
Claire
У меня код работает, проверял на Firefox 3.5.6, 3.5.8, 3.6.
При добавлении в начало кода строк
а в метод onVisit строки
и открытия журнальной записи после выполнения кода, появляются два сообщения "visit".
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
похоже, что у меня была ошибка в манифесте. сейчас всё работает почти нормально... но со странностями: если я перехватываю ответ на AJAX-запрос, html-документ или открытый в браузере яваскрипт - то расширение отрабатывает нормально. проблема в том, что мне надо перехватывать именно яваскрипт, определённый во внешнем файле через тэг <script type="test/javascript" src="http://www.example.com/example.js">. а при работе со внешними ресурсами почему-то нужные события не срабатывают
Отсутствует