>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Разработка http://forum.mozilla-russia.org/viewforum.php?id=18 >Получить историю посещений веб-страниц http://forum.mozilla-russia.org/viewtopic.php?id=27017 |
Elexander > 13-10-2008 18:46:42 |
Здравствуйте. Выделить код Код:var history = Components.classes["@mozilla.org/browser/shistory;1"] .getService(Components.interfaces.nsISHistory); var enum = history.SHistoryEnumerator; var item; while (enum.hasMoreElements()) { item = enum.getNext(); alert(item.URI.spec); } alert('count: ' + history.count + ' index: ' + history.index); Но, энумератор пуст, а свойства count и index равны соответственно 0 и -1. |
Shutnik > 13-10-2008 19:21:47 |
подозреваю, что shistory - это session history для ассоциированного с ним xul browser, например. |
Elexander > 14-10-2008 12:54:04 |
Shutnik пишет
Спасибо за ответ. Не знал, что это сесионная история посещений. Но интерфейс nsINavHistoryService, о котором идет речь в приведенной вами статье, недоступен в Firefox 2. Я определил это используя расширение XPCOM Component Viewer. В списке доступных интерфейсов его не оказалось. А при попытке получить компонент, его реализующий: Выделить код Код:var historyService = Components.classes["@mozilla.org/browser/nav-history-service;1"] .getService(Components.interfaces.nsINavHistoryService); появляется ошибка: Выделить код Код:TypeError: Components.classes['@mozilla.org/browser/nav-history-service;1'] has no properties |
Elexander > 20-10-2008 18:01:50 |
Привожу пример кода, который вытаскивает историю с датами из Firefox 2. (Может кому-то пригодится). Выделить код Код:var rdfSrv = Components.classes["@mozilla.org/rdf/rdf-service;1"] .getService(Components.interfaces.nsIRDFService); var history = rdfSrv.GetDataSourceBlocking("rdf:history"); var enum = history.GetAllResources(); while (enum.hasMoreElements()) { var item = enum.getNext().QueryInterface(Components.interfaces.nsIRDFResource); var date = rdfSrv.GetResource("http://home.netscape.com/NC-rdf#Date"); date = history.GetTarget(item, date, true); date = date.QueryInterface(Components.interfaces.nsIRDFDate).Value; var url = rdfSrv.GetResource("http://home.netscape.com/NC-rdf#URL"); url = history.GetTarget(item, url, true); url = url.QueryInterface(Components.interfaces.nsIRDFLiteral).Value; var dateObj = new Date(); dateObj.setTime(date / 1000); alert('date: ' + dateObj.toGMTString() + ' url: ' + url); } Даты в RDF-формате хранятся в виде количества микросекунд с 1 января 1970. Отрицательные значения представляют время перед той датой; положительные значения представляют время с тех пор. Один день состоит из 86,400,000,000 микросекунд. Для преобразования в формат обьекта Date JavaScript нужно разделить величину на тысячу, так как обьект Date хранит время в миллисекундах. |