TiVo’s updated support pages not friendly to non-IE browsers

TiVo recently updated their support pages, which has broken many links around the net since they seem to have moved pretty much every page and didn’t have the server redirect the old URLs to the new one. (Which is bad form in and of itself.) The new TiVo support pages seem to be IE only. Try to access any of the user guides, for example. Visit http://customersupport.tivo.com/UserGuides.aspx in Firefox and try to access a guide. For that matter try it in Opera.

The only browser it worked for me in is IE – which I normally refuse to use since it is crap (OK, IE7 is less crappy, I admit) and a common security hole. I don’t have a Mac so I don’t know if this works in Safari, but if not, then Mac users are effectively locked out since IE hasn’t been supported on Mac in years. And Linux users almost all use Firefox/Gecko based browsers, or Opera – no IE at all.

This is why there are web standards, which the pages do not follow. I mean, look at this:
<td><a id=744cd5bf7aa5604e36e11e3ed0a66b0f76d1cfe3 href=”#”></a><a id=bdabe80e8a00edc384c222e4431ff28a4e37fa30 cid=’ebee533b-f9c5-4014-b80b-0c44b2dee10a’ parameters=”samewindow~ins_Content.html~” href=”#”><img src=”Media_Resources/images/3028/ug_series3HD.gif” border=0 imgid=”80013e96-c95b-472f-a0fe-901b94e2cdc9″></a><a id=c35905bc56737b73edfa6de9a78bcea164f9ee76 href=”#”></a></td>

That’s the markup for the Series3 entry in the table. If you know HTML, you’ll immediately notice the links are bogus. And there are invalid attributes to boot. Everything is driven by an JavaScript function. Scripted links with no HTML fall back are NEVER a good idea. EVER. That’s just bad web design. If you want a (bitter) laugh, open the page with Firefox’s JavaScript Console open and watch the errors stream by. So not only did they break standards support, their broken version uses code that is broken.

In fact, here is the JavaScript, behind the cut…

function launchurl(cid,options)
{
	if (document.referrer.indexOf("&") !=-1)
	{
		window.open(document.referrer.split("?")[0].substring(0,document.referrer.split("?")[0].lastIndexOf("/")+1) + "LaunchContent.aspx" + "?cid=" + cid  + document.referrer.substring(document.referrer.indexOf("&")) ,'',options)
	}
	else
	{
		window.open(document.referrer.split("?")[0].substring(0,document.referrer.split("?")[0].lastIndexOf("/")+1) + "LaunchContent.aspx" + "?cid=" + cid,'',options)
	}
}
function showhyperlinks()
{
//var path=document.top.location.href;
try
	{
		parent.document.title=document.title;
	}
	catch(ex)
	{
	}
var arratags=document.getElementsByTagName("a");
	for(var i=0;i<arratags.length;i++)
	{
		if(arratags(i).attributes.getNamedItem("cid")!=null)
		{

			var newwin=arratags(i).attributes("parameters").value.split("~")
			if(newwin[0]!="popup")
			{
					if (document.referrer.indexOf("&") !=-1)
				{
					arratags(i).attributes("href").value=document.referrer.split("?")[0].substring(0,document.referrer.split("?")[0].lastIndexOf("/")+1)  + "LaunchContent.aspx" + "?cid=" + arratags(i).attributes("cid").value  + document.referrer.substring(document.referrer.indexOf("&"))
				}
				else
				{
					arratags(i).attributes("href").value=document.referrer.split("?")[0].substring(0,document.referrer.split("?")[0].lastIndexOf("/")+1)  + "LaunchContent.aspx" + "?cid=" + arratags(i).attributes("cid").value
				}
			if(newwin[0]=="samewindow")
				arratags(i).attributes("target").value="_parent";
			}

		}
	}
}
//***************************************************************************
//31st august 2006;vani;to link the Site level css if skin level css is not there
 var applystyle;

  /* This is set to true during preview file generation if current skin is not having style.css otherwise it is set to false **/

	 if(document.styleSheets(0).href=="")
	  {
		document.styleSheets(0).href=parent.document.styleSheets(0).href
	}
	//**************************changes by vani to apply styles for popup content

	try
	{

		 if(document.styleSheets(0).href=="")
			 {
				document.styleSheets(0).href=window.opener.parent.document.styleSheets(0).href

			 }

	}
	catch (ex)
	{

	}

	//************************************************

It is triggered by this in the body element: onload=”showhyperlinks();”

Who thought it was a good idea to load the page with bogus hyperlinks and then programatically populate them with a script? At least give the hrefs legitimate default values and then change them with the script, so things still work when your code blows chunks. That’s a fundamental design issue. Always allow your pages to degrade gracefully. That’s important for many reasons – backwards compatibility with old browsers for one. Making sure your pages run well for the paranoid – many people turn of JavaScript completely, and this page won’t work for them either. Allowing your pages to run on other devices that may have different levels of support, like smart phones. Supporting non-traditional access devices like screen readers used by the blind and visually impaired. Hell, there is no good reason NOT to do it.

Note to TiVo’s web people: When you’re doing an array dereference, you want square brackets [], not parens (). You did that a few places. Also, the attributes[] array is busted. There is a standard version defined in the DOM, but IE implemented a non-standard version. So if you use it, it doesn’t work across browsers. Oh, and get rid of this: <link rel=”stylesheet” type=”text/css” href=”" > The empty href makes browsers default to the current document – which means they try to load the HTML as a stylesheet! BAD.

To help, I just quickly redid the JavaScript off the cuff. It seems to work in Firefox and Opera, not in IE6 though. I’d have to spend more time debugging that, but this is a start for TiVo.

function launchurl(cid,options)
{
	if (document.referrer.indexOf("&") !=-1)
	{
		window.open(document.referrer.split("?")[0].substring(0,document.referrer.split("?")[0].lastIndexOf("/")+1) + "LaunchContent.aspx" + "?cid=" + cid  + document.referrer.substring(document.referrer.indexOf("&")) ,'',options)
	}
	else
	{
		window.open(document.referrer.split("?")[0].substring(0,document.referrer.split("?")[0].lastIndexOf("/")+1) + "LaunchContent.aspx" + "?cid=" + cid,'',options)
	}
}
function showhyperlinks()
{
//var path=document.top.location.href;
try
	{
		parent.document.title=document.title;
	}
	catch(ex)
	{
	}
var arratags=document.getElementsByTagName("a");
	for(var i=0;i<arratags.length;i++)
	{
		if(arratags[i].hasAttribute("cid"))
		{

			var newwin = arratags[i].getAttribute("parameters").split("~")
			if(newwin[0]!="popup")
			{
					if (document.referrer.indexOf("&") !=-1)
				{
					arratags[i].setAttribute("href", document.referrer.split("?")[0].substring(0,document.referrer.split("?")[0].lastIndexOf("/")+1)  + "LaunchContent.aspx" + "?cid=" + arratags[i].getAttribute("cid")  + document.referrer.substring(document.referrer.indexOf("&")))
				}
				else
				{
					arratags[i].setAttribute("href", document.referrer.split("?")[0].substring(0,document.referrer.split("?")[0].lastIndexOf("/")+1)  + "LaunchContent.aspx" + "?cid=" + arratags[i].getAttribute("cid"))
				}
			if(newwin[0]=="samewindow")
				arratags[i].setAttribute("target","_parent");
			}

		}
	}
}
//***************************************************************************
//31st august 2006;vani;to link the Site level css if skin level css is not there
 var applystyle;

  /* This is set to true during preview file generation if current skin is not having style.css otherwise it is set to false **/

	 if(document.styleSheets[0].href=="")
	  {
		document.styleSheets[0].href=parent.document.styleSheets[0].href
	}
	//**************************changes by vani to apply styles for popup content

	try
	{

		 if(document.styleSheets[0].href=="")
			 {
				document.styleSheets[0].href=window.opener.parent.document.styleSheets[0].href

			 }

	}
	catch (ex)
	{

	}

	//************************************************

I really wish companies like TiVo would stop doing stupid things with their web pages and adhere to the standards – XHTML, CSS, ECMAScript, etc. There is nothing on TiVo’s site that can’t be done in a standards compliant manner. It really angers me to see this kind of thing on a major company’s site. I’m usually fairly mellow, but this kind of crap is a major pet peeve of mine. I’ve worked with web technologies since 1991 and I helped write a couple of the web standards (HTML4 & CSS2), and I know this isn’t hard to get right.

I still love TiVo, but that just makes this kind of thing piss me off all the more. When someone I don’t care about does this it doesn’t bug me as much.

OK, I’m done ranting about this. (And yes, I sent a more concise version to TiVo’s webmaster(s).)

About MegaZone

MegaZone is the Editor of Gizmo Lovers and the chief contributor. He's been online since 1989 and active in several generations of 'social media' - mailing lists, USENet groups, web forums, and since 2003, blogging.    MegaZone has a presence on several social platforms: Google+ / Facebook / Twitter / LinkedIn / LiveJournal / Web.    You can also follow Gizmo Lovers on other sites: Blog / Google+ / Facebook / Twitter.
This entry was posted in TiVo. Bookmark the permalink.
  • emarosan

    I just tried in Safari, no go (not a surprise after I looked at the code excerpts.)

    I totally agree with you on the being angry part. I just went on a rant about standards compliance myself yesterday, and IE’s crappy support. It just makes designing so much harder =/

  • anonymous

    So much dependency on Javascript also means the site is not accessible to the handicapped. This means people with poor sight (they do listen to TV, by the way) or hearing will have issues accessing the site. Recently advocacy groups have started suing companies which do not make their websites accessible in a test of the Americans with Disabilities Act. Target has recently been sued as their online store is not accessible with a screen reader.

    Companies really need to consider all the people who they serve. Not just the majority of Windows/IE users, but users who also have issues and special circumstances beyond a choice of OS and browser.

  • watermelon80

    I’ll have to agree with you here. I found it shocking and disappointing that it doesn’t work with Safari or Firefox. Having javascript disabled virtually makes the website non-navigable.

  • shadeofnight

    Does this mean that they can no longer say they offer TiVo Programming from the web, when all the main web browsers will no longer work with their site? I have not used IE in years, and have no plans to.

    This means TiVo is no longer a legal web site in my mind, and that is a shame.

  • mackys

    …that ticks me off like using some insane level of broken JavaScript instead of a simple tag. GRAR! NERD SMASH!!

  • buran

    I have referred to the guide online instead of digging out my paper copy a number of times. Now I can’t even get the link to load. (For future reference what’s the URL to the PDF? How damn hard is it for them to just have a damn direct link!?)

    How do I submit a complaint? All I can find is a funnel to forums, knowledgebases, or “call us”. And I will not call. I hate to use the phone. Being hearing-impaired is a perfectly legit excuse. How did you do it? It’s obviously possible…

    or should I just follow RFC and use webmaster@ ?

  • buran

    Responding to myself:

    I used webmaster@ and got an out of office autoreply telling me to send to webteam@ — so I did, along with a brief note attaching the autoreply and a note that I’d sent it there originally as per http://www.ietf.org/rfc/rfc2142.txt (in case they wonder how I got the address).

  • megazone

    So far it looks like it is just the support area of the site and TiVo Central Online still works. There have been some quirks with TCO in the past, but I’ve never had it actually stop working for me in Firefox.

  • megazone

    Heh, I thought you might pop up. I know you have, shall we say, strong feelings about the use of JavaScript. :-)

  • megazone

    If you go to TiVo.com and click on Contact Us on the left, it goes to: http://www.tivo.com/5.9.asp

    Down at the bottom center is ‘Webmaster’, which goes to: http://www.tivo.com/5.13.asp?messageType=web

    Which is a web form.

    That’s what I used. It emails on the backend, since I got a similar ‘Out of Office – the mail has been forwarded’ reply.

  • megazone

    I agree completely, I was part of the Web Accessability Initiative working group that created the WAI recommendations for access.

  • stile99

    Alas, in the world of “outsource everything”, companies are increasingly becoming unable to maintain a web presence. When your ‘coders’ are barely more than script kiddies, then this is what you get. A bunch of crap that barely displays in the crappiest browser ever, and won’t even think about displaying in a real browser.

    As you mentioned, it really isn’t difficult to adhere to well-documented standards. It is actually much more difficult NOT to.

  • anonymous

    Been out of town for a while and just returned only to find out that my tivo points expired on Feb 1 and they won’t honor them. I think this is a really bad customer service choice. I have referred many to tivo and it will stop now. So much for keeing your customer’s happy. I guess Tivo is now like every other large company they couldn’t give a crap about those who were there in the beginning.

  • megazone

    Most rewards programs have some points expiration – it is probably to motivate people to build up points and not just slowly bank them over years. I know each month I get an email with my current points status (two actually, I have two emails registered), so it shouldn’t have been a total surprise.