Skip to content

Instantly share code, notes, and snippets.

@jscher2000
Created June 18, 2017 17:33
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jscher2000/9623b34ed793274396ac04b81cb81660 to your computer and use it in GitHub Desktop.
Save jscher2000/9623b34ed793274396ac04b81cb81660 to your computer and use it in GitHub Desktop.
Console Script to Scrounge Title and URLs from a Firefox Session History File
/* Open old session history file in a tab, open the web console, paste all of this, press Enter to execute.
If popup is blocked, allow popups then try again. */
function scrub(t){t=t.replace(/&/g,'&amp;'); t=t.replace(/>/g,'&gt;'); t=t.replace(/</g,'&lt;'); return t;}
if (window.confirm('Scrounge session URLs?')) var newwin=window.open();
if (newwin){
newwin.document.write('<!DOCTYPE html>\n<html><head><title>URLs Scrounged from Session History</title><meta http-equiv=\'Content-Type\' content=\'text/html; charset=UTF-8\'><style>.urllist>p{margin-left:2.25em}.urllist>p:nth-of-type(1){margin-left:0}</style></head>\n');
newwin.document.write('<body><h1>URLs Scrounged from Session History</h1>\n');
var out=new Array();
var sess=document.body.textContent.split('"_closedWindows":[');
console.log(sess.length);
for (var n=0; n < sess.length; n++){
if(n==1) out.push('<h1>Closed Windows</h1>');
else out.push('<h1>Windows</h1>');
var winds = sess[n].split('{"tabs":[');
for (var i=1; i < winds.length; i++) {
if (n==1) out.push('<h2 style=\'border-bottom:1px solid #000\'>Closed Window ' + i + '</h2><div style=\'margin-left:2.25em\'>');
else out.push('<h2 style=\'border-bottom:1px solid #000\'>Window ' + i + '</h2><div style=\'margin-left:2.25em\'>');
var wtabs = winds[i].split('"_closedTabs":[');
for (var m=0; m < wtabs.length; m++){
var tabs = wtabs[m].split('{"entries":[');
for (var j=1; j < tabs.length; j++) {
if (m==1 && j==1) out.push('<div style=\'margin-left:2.25em\'><h3>(Closed Tabs)</h3>');
out.push('<h3>Tab ' + j + '</h3>\n<div class=\'urllist\'>');
var strTemp = tabs[j].split(',"children":[')[0]; // ignore children
var taburls = strTemp.split('{"url":"');
for (var k=taburls.length - 1; k >= 1; k--) {
var strURL = taburls[k].substr(0, taburls[k].indexOf('","'));
var strTitle = taburls[k].split('"title":"')[1] || '[Title Not Available]';
strTitle = strTitle.substr(0, strTitle.indexOf('","'));
if (strTitle.length == 0) strTitle = '[Title Not Available]';
if (k == taburls.length - 2) out.push('<p>&larr; Back <em>(earlier pages visited in this tab)</em>:</p>');
out.push('<p><strong>' + scrub(strTitle) + '</strong><br><a href=\'' + strURL + '\' target=\'_blank\'>' + scrub(strURL) + '</a></p>');
}
out.push('</div>');
}
out.push('</div>');
}
}
}
newwin.document.write(out.join('\n'));
newwin.document.write('\n</body>\n</html>');
newwin.document.close();
}
@jscher2000
Copy link
Author

jscher2000 commented Jun 18, 2017

I suggest working on a copy of the session history file, with a .json or .txt extension, rather than working on a live .js file.

Note: This also works in Chrome if you can't open your session history file in Firefox. (Tap the F12 function key to open the console in the lower part of the tab.)

@jscher2000
Copy link
Author

If you use a .json extension and your Firefox has the JSON viewer enabled -- it creates a structured listed with ability to open/close different elements -- view source (Ctrl+u) to work with a "raw" copy of the data, and then open the web console (Ctrl+Shift+k) and run the script from there.

@jscher2000
Copy link
Author

I created a webapp that is simpler to use:

@ShekinahG
Copy link

Hi jecher2000,

I need your help urgently please. i would like to restore my previous session and i was able to use your 'Session History: https://www.jeffersonscher.com/res/scrounger.html' successfully but i could not reload the page bypassing the cache using Windows: Ctrl+Shift+r.

Please help me out, it's very urgent.

Thanks

@g1thub11
Copy link

g1thub11 commented Jan 6, 2020

Thank you for creating this.

I have a question: When I recover a session using this script, and import the file into my bookmarks library, each tab from a window is saved in its own folder. So if I recover 100 tabs from one window, 100 bookmark folders will be created. How do I change this behavior? I would like all tabs from one window to go into just one bookmark folder.

@jscher2000
Copy link
Author

When I recover a session using this script, and import the file into my bookmarks library, each tab from a window is saved in its own folder.

Hi, the structure of the list generated by this script is quite different from an importable "bookmarks.html" file. I think you could generate a bookmarks.html file by combining code from two projects over here:

@jscher2000
Copy link
Author

P.S. The h3 tag is the one used to indicate a folder name. Perhaps if you find/replace that to a different tag such as p then Firefox will not bother will all the folders? You might want to find/replace the h1 to h3 as an outer container.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment