19 votes

Accéder à l'ensemble de mon historique de navigation via Javascript

Si je clique sur l'onglet "Historique" de mon navigateur, je peux accéder à un dossier contenant tous les liens que j'ai visités, classés par date.

Comment puis-je y accéder de manière programmatique avec Javascript ? Je suis encore novice en Javascript mais je veux quelque chose comme :

var aListOfDateLinkPairs = window.history.some_get_list_function;

Je suis sûr qu'il s'agit d'un gros problème de confidentialité pour une entité arbitraire, mais que se passe-t-il si je veux mettre cela en œuvre (de manière programmatique) pour moi-même dans mon propre navigateur ?

Gracias.

19voto

Indigenuity Points 1469

En général, l'historique est protégé par le navigateur contre l'accès par javascript, sauf par les fonctions de retour et d'avance. Il existe quelques bidouillages qui permettent de visualiser une partie de l'historique, mais ce ne sont que des bidouillages.

Si vous souhaitez afficher/modifier l'historique de manière programmée, vous pouvez le faire via des plugins de navigateur. Par exemple, les plugins Chrome peuvent utiliser cette API

EDITAR

Mozilla a également des informations sur la modification de l'historique disponible en Javascript. aquí .

Cela ressemble aussi à cette question parle de certaines des mêmes choses dont vous avez besoin.

10voto

John Citizen Points 164

Javascript n'offre que des appels de base une fois que votre page prend le contrôle du navigateur comme :

history.length
window.history.back()
history.forward()
window.history.go(-3)

Mais si vous deviez écrire votre propre navigateur, vous utiliseriez alors un 3GL, auquel cas vous auriez le contrôle total de ce que l'utilisateur a tapé dans les champs de recherche ou d'adresse que vous lui avez fournis, de sorte que vous ne devriez pas avoir de problèmes à conserver un enregistrement de ce que l'utilisateur a fait si vous savez ce que vous faites.

6voto

adantj Points 307

Réponse courte : non, vous ne pouvez pas accéder à l'historique de votre navigateur via le Javascript commun.

Vous pourriez créer une extension qui serait multi-navigateur avec quelque chose comme : http://crossrider.com/

Les docs pour accéder à la Places Le stockage, qui vous permet d'accéder à l'historique du navigateur est ici pour firefox : https://developer.mozilla.org/en-US/docs/Using_the_Places_history_service

Et pour le chrome, c'est ici : http://developer.chrome.com/extensions/history.html

Il existe un fichier pour Places appelé Places.sqlite est une base de données sqlite, si vous construisiez une application locale qui lit ce fichier, au lieu d'y accéder depuis votre navigateur, ce serait plus simple à mon avis.

Vous pouvez également utiliser le https://addons.mozilla.org/en-us/firefox/addon/sqlite-manager/ sqlite manager et ordonner l'historique selon les dates directement à partir de la base de données. Voici un ERD pour cela http://people.mozilla.org/~dietrich/places-erd.png

3voto

ekim Points 31

L'URI place: fournit un minimum de potentiel pour le système de gestion de l'information. javascript "seulement" (souris nécessaire) solution donnée ci-dessous.

Notez tout d'abord la distinction entre l'historique des sessions, qui peut être consulté via History y window.history et l'historique global du navigateur (dans FF, il s'agit d'une partie de la bibliothèque et d'une autre partie de la bibliothèque, les signets), qui n'a pas de lien direct avec l'historique du navigateur. javascript l'interface d'accès.
réf :

testé avec :

window.navigator.userAgent=
      Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.4) Gecko/2008102920 **Firefox**/3.0.4
                                                                                                                               (Splashtop-v1.2.17.0)

(La familiarité intime avec ce sujet est malheureusement due à la gravement handicapé FF publié sous le nom de QuickWeb by Device VM dans le système Splashtop).

Voici ce que l'on peut faire :
Nota:

  • l'environnement de test FF identifié ci-dessus - certaines des " conventions " utilisées utilisées peuvent être exclusives et non disponibles universellement dans d'autres navigateurs ou d'autres versions de FF

  • au prix d'une intervention un peu plus manuelle et exigeante en main-d'œuvre que
    1 un simple clic d'activation ...
    la solution proposée ici nécessite également
    2 un clic sur un lien de signet
    3 sauvegarder cliquer
    4 ~ 6 signet ouvert et séquence sélectionnée
    7 résultats : glisser-déposer
    8 ~ 10 nettoyer et supprimer les résultats des signets
    (N'est-ce pas là l'anathème de tout le précepte de l'Ordre des automates, c'est-à-dire de l'automatisation des ordinateurs ?
    js js is js - Juste dire que JavaScript est juste [trop] "simple")

En utilisant le javascript, construisez un place: avec le schéma URI approprié .some_get_list_function et l'ajouter aux favoris.

<a href="place:queryType=0&sort=8&maxResults=10"                       title="hysterix">extract history</a>

Le fait de cliquer sur le lien échoue mais le fait de cliquer avec le bouton droit de la souris sur le signet et de cliquer ensuite sur le signet "réussit". Par conséquent, autant résoudre le problème du clic gauche pour rediriger immédiatement vers le signet.

<a href="place:queryType=0&sort=8&maxResults=10" rel="sidebar" title="hystryx">extract history</a>

Faites glisser et déposez le signet place: URI " hystryx "dans une cible <form><textarea> . Notez qu'une limitation importante est que ce processus récupère UNIQUEMENT les URI de l'histoire et aucun de la chronologie de l'histoire, des titres, etc. Il est possible de récupérer certaines de ces informations (comme les titres en ouvrant chaque URI pour les extraire, ce qui change bien sûr la "date d'accès la plus récente" de l'URI dans l'historique) pour rendre les URI sous forme de liens "agréables".

Tout mettre en place :

data:text/html;charset=utf-8,
<html><title >Heuristic History Hysterics scURIple</title>
<!-- 
http://stackoverflow.com/questions/13369829/access-my-entire-browsing-history-via-javascript
                                                                                               /22773361# 22773361                       -->
<!-- 
   - scURIples (scriples) are generic schema (data:, javascript:, place:, ... ) URI that embed script
   - data: scURIples (scriples) are amenable to direct cut & paste URI address bar evaluation
   - generally no particular distinction is made between scURIples of different schema,
       such as this data: schema URI, but ... 
   - javascript: schema specific scURIples are called scriplets or bookmarklets                                -->
<!-- 
   a bookmark of this data: scURIple or its internal javascript: scriplet does the same thing             -->
<!--
  a place[s]: schema URI "works" from a bookmark only and not the address bar or a hyperlink      -->
<!-- for internal use only (by the scURIbbler used to edit this script):  
       javascript: with ( opener . document . forms[0] . JS ) value = 
                                        value . replace(  /\t|\n/g, function(c){ return escape(c) + c } )  ; close();//  
       scURIples are unscURIpulous 
              NB. no raw tabs, % 09 's collapse to null, quote raw %'s w/ non-numerics, };'s ,  ...             -->
<script>
javascript:

String.prototype.HTMLtagWrap   =
    function ( tag,  attrs)  { 
        return  tag[0]=="/" ?
            "<"  +tag+                                ">"  +this+  "<"  +tag.substr(1)+  (attrs?" "+attrs:"") +  ">"    :
            "<"  +tag+ (attrs?" "+attrs:"") + ">"  +this+  "</"  +tag+                                                 ">"
    }  ;

String.prototype.HTMLwrapTags =
   function ( tagRA, atRA) { 
      return tagRA[0] ? this . HTMLtagWrap( tagRA.pop(), atRA.pop()) . HTMLwrapTags( tagRA, atRA)
                                :  this
   }  ;

/* alert */ ( str =
( function(x){return x.HTMLtagWrap('title') + x.HTMLwrapTags(['/pre','center','b'] , [ ] ) }
                               ('Heuristic History Hysterics')+
    '1. '.HTMLtagWrap('b') +
    '<input     id=URIplcQry     type=text    size=120  ' +
                           'value="place:queryType=0&sort=8&maxResults=25" >\n' +
    'suggestions:\t try just a raw place: with no corpus or places: (undocumented with an s)\n' + 
    'auto attribution:\t' + 
    '<input type=button onclick=URIplcQry.value+="&"+this.value  value=sort=4                        >  \t' + 
    '<input type=button onclick=URIplcQry.value+="&"+this.value  value=type=5                       >  \t' + 
    '<input type=button onclick=URIplcQry.value+="&"+this.value  value=queryType=1            >\t  ' + 
    '<input type=button onclick=URIplcQry.value+="&"+this.value  value=domain=""                 >\t  ' + 
    '<input type=button onclick=URIplcQry.value+="&"+this.value  value=includeHidden=true  >\t   ' + 
    '<input type=button onclick=URIplcQry.value+="&"+this.value  value=onlyBookmarked=true >\t' + 
    '\n\n2. '.HTMLtagWrap('b') +
    'This link bookmarks the place: URI from step 1: '  +
    'place: query URI href results' .
        HTMLtagWrap(  'A', 
            ' href="places:"  rel="sidebar"  title="hystryx  " id="hystryx  " ' +
            ' onmouseover ="with(this)title=id+(href=document.forms[0].URIplcQry.value)"  '
        ) +
    '\t(hint: to see the actual link, mouse over it 2x)'  +
    '\n\n3. '.HTMLtagWrap('b',   ' style="vertical-align:top;" '  ) +
  ( '\n\t\t\tINSTRUCTIONS\n\n' +
    '1. make the href place: query for the link in step 2. \n' +
    '2. click the link to create a bookmark that accesses the URI library\n' +
    '3. drag & drop the new bookmark (aka a container) here (replace this content)\n' +
    '4. cleanup and delete the new bookmark if desired\n'  +
    '5. to be done: add a scURIbbler to massage this textarea\n'  +
    '\n\n' +
    'tested with userAgent:\t\t\t\t'  +
    'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4'  +
                                                                                                         '(Splashtop-v1.2.17.0) \n'  +
    '\twindow.navigator.userAgent =\t\t'  + window.navigator.userAgent +
    '\n ' 
  ) .HTMLtagWrap('textarea', 'id=histURIs  rows=12 cols=120 nowrap') +
   '\n\n4. ...'.HTMLtagWrap('b') +
   '\n\n5. '.HTMLtagWrap('b') +
   'scURIbbler:  <input   type=text    size=120  id=histURIpg ' +
       ' value="javascript:with(opener)with(document.forms[0]) '                                              +
           ' ( URIplcQry.value.HTMLtagWrap(\'b\') + '                                                                  +
              ' histURIs.value.replace(/^.*$/g,function(m){return m.link(m)}) '                              +
          '  ).HTMLwrapTags( \'html pre\'.split(/ +/) , [ ] ) '                                                                     +
    ' "><input type=button value="open histURIs" onclick=window.open(histURIpg.value )>  ' +
    '  '
)  .  HTMLwrapTags ( ["html", "form", "pre"] , [ ] ) 
);

/*
window.open (    "data:text/html;charset=utf-8,"  +  str . replace ( /\n/g,  '%'+'0A ' )        );
*/
document.write ( str );

</script>
</html>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X