a script to collect tab URLs & titles

Jon Hicks omniweb at hicksdesign.co.uk
Tue Apr 5 03:19:01 PDT 2005


Thanks for this Mitchell, this is really useful, and works a treat!

Cheers,
Jon

-----------------------------------------------
// hicksdesign
10 pine rise / witney / oxon / OX28 1EY / uk
T: +44 (0)1993 848 552*
F: 0871 733 4594 (uk only)
(*office closed on Fridays)

Portfolio, blog & downloads:  http://www.hicksdesign.co.uk
------------------------------------------------


On 4 Apr 2005, at 05:26, Mitchell L Model wrote:

> Here is a script that makes an HTML page of links with the titles and 
> URLs of all the
> tabs of the current browser.  (Tabs don't have titlesin OmniWeb 5's 
> \AppleScript dictionary --
> the script steps through all the tabs and takes each one's title from 
> the browser.)
> The script prompts for a filename to which the HTML will be written.  
> At the end
> the script opens the file it created -- I'm not sure what the best 
> approach is for that:
> open a new browser every time, open a new tab in the current browser, 
> or open
> a new browser the first time but reuse that s a special "tab URLs" 
> browser if
> the script is run again.
>
> To install, extract this text, put it into a script in Script Editor 
> (or whichever tool you
> use to edit AppleScripts -- I use Late Night Software's wonderful 
> Script
> Debugger, but it's expensive), and save it to your OmniWeb 5 script
> folder (Application Support:OmniWeb 5:Scripts in either ~/Library or 
> /Library).
> I called it "Collect URLs of Tabs", but you can make up your own name 
> for it, of course.
>
> Is this too long to post here?  Would it have been better to stop here 
> and put the
> rest on a web page for people to download?  Had I done that I could 
> have posted
> a compiled script rather than a text file so people wouldn't have to 
> go into a script
> editor to use it.  I'd like to hear what people think about this -- 
> this script seems to
> me to be around the border beyond which things are too long to include 
> in posts
> to the list, but I never know what's expected.
> __________________________________ CUT 
> _______________________________________
>
> -- Save the URLs and titles of all tabs in OmniWeb's front Browser 
> (Window)
> -- as links in an HTML file whose name is obtained through the usual 
> file dialog.
> -- When finished, open the file.
>
> -- Mitchell L Model, mlm at acm.org
>
> (*
> In addition to its utility this script demonstrates some aspects of 
> AppleScript that
> might be helpful to people learning (more) Applescript programming 
> including:
>
> 	OmniWeb:
>
> 		accessing tabs of the front browser (window)
> 		getting the URL of a tab
> 		making a tab current
> 		getting the title of the front browser
> 			(which it takes from the current tab)
>
>     Generic:
>
> 		global variables
> 		top-level script statements other than "tell" and "on"
>
> 		subroutines
> 		conditionals
> 		repetition
>
> 		prompting the user for a file name
> 		handle user cancellation of a file dialog
> 		opening files for writing
>  		closing files
>
> 	 	exception handling
> 		passing along an exception
>
> 		creating records
> 		access fields of records
> 		adding items to a list
>
> *)
>
> ------------------------------ Global Constants 
> ------------------------------
>
> -- These appear before the code so that they don't distract
> -- from the meaningful parts of the script.  Each is actually
> -- used in just one place.
>
> -- the text to print out to start the HTML page
> set startString to "<html>
> 	<head>
> 		<title>
> 			OmniWeb Tab URLs
> 		</title>
> 	</head>
> 	<body>
> 		<h1>
> 			OmniWeb Tab URLs
> 		</h1>
> 		<ul>
> "
>
> -- the text to print out to conclude the HTML page
> set endString to "		</ul>
> 	</body>
> </html>
> "
>
> -- the text to print out before each URL
> set listItemStartString to "			<li><a href=\""
>
> -- the text to close the link to the URL
> set listItemEndString to "</a></li>
> "
>
> ----------------------------------- "Main" 
> -----------------------------------
>
> set filnam to askFileName()
> if filnam is null then return -- user cancelled
>
> (*	fil is used as a global throughout because otherwise it's tricky to
> 	set and/or return it from within openFile's try (below), but also for
> 	convenience since nearly all the subroutines refer to it 			*)
> set fil to my openFile(filnam)
>
> my writeURLs()
> close access filnam
>
> ----------------------------- OmniWeb Subroutines 
> --------------------------
>
> on collectUrls()
> 	tell application "OmniWeb" -- no need to activate
> 		set urls to {}
> 		set theBrowser to front browser
> 		repeat with tb in tabs of theBrowser
> 			set active tab of theBrowser to tb
> 			copy {addr:the address of tb, name:the name of theBrowser} ¬
> 				to the end of urls
> 		end repeat
> 		urls
> 	end tell
> end collectUrls
>
>
> ----------------------------- Generic Subroutines 
> ----------------------------
>
> on askFileName()
> 	try
> 		return choose file name default name "OmniWeb Tabs.html"
> 	on error errmsg number errnum from errobj
> 		if errnum is -128 then
> 			return null -- user cancelled
> 		else
> 			error errmsg number errnum from errobj -- pass it along
> 		end if
> 	end try
> end askFileName
>
> on openFile(filnam)
> 	global fil
> 	try
> 		set fil to open for access filnam with write permission
> 	on error errmsg number errnum from errobj
> 		-- open closing first if already open; this can happen when the 
> script
> 		-- is being debugged or gets interrupted then rerun again
> 		if errnum is -49 then -- close and reopen, without error protection
> 			close access filnam
> 			set fil to open for access filnam with write permission
> 		else -- some other error occurred; just pass it on
> 			error errmsg number errnum from errobj
> 		end if
> 	end try
> 	set eof of fil to 0
> 	fil
> end openFile
>
> on writeString(str)
> 	global fil
> 	write str to fil
> end writeString
>
> on writeURLs()
> 	global startString, endString
> 	my writeString(startString)
> 	my writeListItems(my collectUrls())
> 	my writeString(endString)
> end writeURLs
>
> on writeListItems(urls)
> 	global listItemStartString, listItemEndString
> 	repeat with u in urls
> 		writeString(listItemStartString)
> 		writeString(the addr of u)
> 		writeString("\">")
> 		writeString(the name of u)
> 		writeString(listItemEndString)
> 	end repeat
> end writeListItems
>
>
> ----------------------------------- The End 
> ----------------------------------
>
> _______________________________________________
> OmniWeb-l mailing list
> OmniWeb-l at omnigroup.com
> http://www.omnigroup.com/mailman/listinfo/omniweb-l
>




More information about the OmniWeb-l mailing list