groups

info

"static text 1 of window 1" is the text shown at the bottom of the Safari window if you do a "View>Show Status Bar" command. • for a brand-new window that hasn't loaded a single item, this text has the value "Untitled" • if the server is being contacted, the text begins with "Contacting" • if an item is being sent (i.e. a jpeg or some text), the text begins wit "Loading" if more than one window is open, then the status bar text could be in "static text 1 of group 1 of window 1", thus the second variable and the switch. (I discovered this when the handler failed and I started digging for the reason). I do several scripts where I need to load a page where I want to print the contents to a PDF. These pages sometimes take a fair amount of time to load. I had to have a reliable way to ensure that they were completely loaded before I tried to print. This handler works 95-98% of the time. The wait_secs parameter is the time, in seconds, to wait for the page to load. If the page hasn't loaded when the wait time has passed, the handler returns with a value of false. If the page is loaded, it returns with a value of true.


tags: applescript,safari,loaded

Link to this snippet:


Download to Code Collector

language: AppleScript
licence: Other

check_safari_page_loaded_handler

options: send to code collectorview all seydoggy's snippets
-- check_Safari_page_loaded handler

on check_Safari_page_loaded(wait_secs)
	set loaded to false
	set cnt to 0
	repeat until loaded
		set cnt to cnt + 1
		delay 0.5
		tell application "System Events" to ¬
			tell process "Safari"
				set x to (value of static text 1 of window 1 as text)
				set y to ""
				if exists group 1 of window 1 then
					if exists (static text 1 of group 1 of window 1) then set y to (value of static text 1 of group 1 of window 1 as text)
				end if
				if y = "" then
					set w_Name to x
				else
					set w_Name to y
				end if
				set loading to false
				if (w_Name begins with "Contacting") then set loading to true
				if (w_Name begins with "Loading") then set loading to true
				if (w_Name begins with "Untitled") then set loading to true
				if loading and not (cnt > (wait_secs * 2)) then
					set loaded to false
				else
					set loaded to true

					exit repeat
				end if
			end tell -- process Safari
	end repeat
	if cnt > wait_secs * 2 then set loaded to false
	return loaded
end check_Safari_page_loaded

-- check_Safari_page_loaded handler