通过 Javascript 访问我的整个浏览历史

IT技术 javascript
2021-01-27 11:57:20

如果我单击浏览器上的历史记录选项卡,我可以访问一个文件夹,其中包含按日期组织的所有我访问过的链接。

如何使用 Javascript 以编程方式访问它?我还是 Javascript 的新手,但我想要类似的东西:

var aListOfDateLinkPairs = window.history.some_get_list_function;

我确信这对于某些任意实体来说是一个很大的隐私问题,但是如果我想在我自己的浏览器中为自己(以编程方式)实现这个呢?

谢谢!

4个回答

一般来说,浏览器会保护历史记录免受 javascript 访问,除非通过后退和前进功能。有一些黑客可以查看一定数量的历史,但它们只是——黑客。

如果您想以编程方式查看/修改历史记录,您可以通过浏览器插件来实现。例如,Chrome 插件可以使用此 API

编辑

Mozilla还拥有约历史修改可用于JavaScript的一些信息在这里

看起来这个问题也讨论了你需要的一些相同的东西。

@jbyrd 您可以使用Document.referrer获取以前访问过的 URL(但不是整个浏览历史记录)
2021-03-21 11:57:20
你能举一个可以用来查看历史的黑客的例子吗?
2021-03-22 11:57:20
一些黑客链接已损坏。
2021-03-31 11:57:20

Javascript 仅在您的页面控制浏览器后才提供基本调用,例如:

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

但是,如果您要编写自己的浏览器,那么您将使用 3GL,在这种情况下,您可以完全控制用户在您提供的搜索或地址字段中键入的内容,因此您应该不会在那里遇到任何问题如果您知道自己在做什么,则记录用户所做的事情。

惊人的!我想知道我当前的页面是否有任何历史记录要显示或没有后退按钮,并且history.length工作正常!
2021-04-11 11:57:20

简短回答 否,您无法通过常见的 Javascript 访问浏览器的历史记录。

您可以创建一个跨浏览器的扩展程序,例如:http : //crossrider.com/

用于访问Places存储的文档,可让您访问浏览器的历史记录,用于 firefox:https : //developer.mozilla.org/en-US/docs/Using_the_Places_history_service

对于 chrome,它在这里:http : //developer.chrome.com/extensions/history.html

有一个文件Places被称为Places.sqlite是一个 sqlite 数据库,如果您要构建一个从该文件读取的本地应用程序,而不是从您的浏览器访问它,我认为那会更简单。

您还可以使用https://addons.mozilla.org/en-us/firefox/addon/sqlite-manager/ sqlite manager 并根据日期直接从数据库中订购历史记录。这是http://people.mozilla.org/~dietrich/places-erd.png的 ERD

URIplace:模式为javascript下面给出“唯一”(需要鼠标移动)解决方案提供了一点潜力

首先注意可以通过History访问的会话历史记录window.history没有直接javascript访问接口的整体浏览器历史记录(在 FF 中这被称为库的一部分,另一个库部分是书签)之间的区别
参考:

测试:

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)

(不幸的是,由于在 Splashtop 系统中由 Device VM 以 QuickWeb 形式发布严重残缺的FF ,对这个主题的熟悉程度非常高。)

以下是可以执行的操作:
注意:

  • 上面确定的 FF 测试环境 - 使用的一些“约定”可能是独占的,在其他浏览器或 FF 版本中并不普遍可用

  • 代价是比
    1 简单的激活单击更多的手动劳动密集型干预...
    这里建议的解决方案还需要
    2 书签链接单击
    3 保存它单击
    4 ~ 6 打开书签并选择序列
    7 结果拖放
    8 ~ 10 清理和删除书签中的结果
    (这不是对自动机秩序又名计算机自动化的整个戒律的诅咒吗?
    js js 就是 js - 只是说 JavaScript [太]“简单”)

使用 javascript 构造place:具有适当方案 URI 并将其添加为.some_get_list_function书签。

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

单击链接失败,但右键单击为其添加书签,然后单击书签“成功”。因此,不妨解决左键单击立即重定向到书签的问题。

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

将现在加入书签的place:URI " hystryx"拖放到目标中<form><textarea>请注意,一个重要的限制是该过程仅检索历史的 URI,而没有检索历史年表、标题等。可以恢复其中的一些信息(例如通过打开每个 URI 提取标题的标题,这样做当然会改变URI 历史记录中的“最近访问日期”)以将 URI 呈现为“不错”的链接。

把它们放在一起:

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>