如果我单击浏览器上的历史选项卡,我可以访问一个文件夹,其中包含我访问过的所有链接,按日期组织。
如何使用 Javascript 以编程方式访问它?我还是 Javascript 的新手,但我想要类似的东西:
var aListOfDateLinkPairs = window.history.some_get_list_function;
我确信这对于某些任意实体来说是一个很大的隐私问题,但是如果我想在自己的浏览器中为自己(以编程方式)实现这一点怎么办?
谢谢!
如果我单击浏览器上的历史选项卡,我可以访问一个文件夹,其中包含我访问过的所有链接,按日期组织。
如何使用 Javascript 以编程方式访问它?我还是 Javascript 的新手,但我想要类似的东西:
var aListOfDateLinkPairs = window.history.some_get_list_function;
我确信这对于某些任意实体来说是一个很大的隐私问题,但是如果我想在自己的浏览器中为自己(以编程方式)实现这一点怎么办?
谢谢!
一般来说,历史记录受到浏览器的保护,以防止 javascript 访问它,除非通过后退和前进功能。有一些黑客可以查看一些历史记录,但它们只是——黑客。
如果您想以编程方式查看/修改历史记录,您可以通过浏览器插件来实现。例如,Chrome 插件可以使用这个 API
编辑
Mozilla在此处也有一些关于 Javascript 可用的历史修改的信息。
看起来这个问题也谈到了你需要的一些相同的东西。
Javascript 仅在您的页面控制浏览器后才提供基本调用,例如:
history.length
window.history.back()
history.forward()
window.history.go(-3)
但是,如果您要编写自己的浏览器,那么您将使用 3GL,在这种情况下,您将完全控制用户在您提供的搜索或地址字段中输入的内容,因此您应该不会有任何问题如果您知道自己在做什么,请记录用户所做的事情。
简短回答不,您无法通过通用 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 管理器,并直接从数据库中根据日期对历史记录进行排序。这是http://people.mozilla.org/~dietrich/places-erd.png的 ERD
URI模式为下面给出的“唯一”(需要鼠标移动)解决方案place:
提供了一点潜力。javascript
首先注意会话历史(可以通过History
和访问)与没有直接访问接口window.history
的整体浏览器历史(在 FF 中这被称为库的一部分,而另一个库部分是书签)之间的区别。
参考:javascript
developer.mozilla.org/en-US/docs/Web/API/Window.history
测试:
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 is js - Just Saying JavaScript is Just [too] "Simple")
使用 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>