I’m making a Greasemonkey script to add download links beside videos on cnn.com.
I used a saved version of the HTML page to test my script and was able to get it to work perfectly. Then when I put the javascript into Greasemonkey and tried it on the actual site, it didn’t work.
This is the not the full script, but the part of the script with the problem. It is simply supposed to add a link at the bottom of every div with the “sec_video_box” class (as seen in the picture).
// ==UserScript==
// @name CNN Download
// @namespace Cool
// @description CNN Download
// @include http://*cnn.com/video/*
// ==/UserScript==
var getClass = function(clssName, rootNode /*optional*/){
var root = rootNode || document,
clssEls = [],
elems,
clssReg = new RegExp("\\b"+clssName+"\\b");
// use the built in getElementsByClassName if available
if (document.getElementsByClassName){
return root.getElementsByClassName(clssName);
}
// otherwise loop through all(*) nodes and add matches to clssEls
elems = root.getElementsByTagName('*');
for (var i = 0, len = elems.length; i < len; i+=1){
if (clssReg.test(elems[i].className)) clssEls.push(elems[i])
}
return clssEls;
};
function insertlinks() {
var boxes = getClass("sec_video_box");
for (i=0; i<boxes.length; i++) {
var theboxid = boxes[i].getAttribute("id");
document.getElementById(theboxid).innerHTML = document.getElementById(theboxid).innerHTML + '<a href="'+ theboxid +'">link</a>';
}
}
window.onload = insertlinks ();
Can someone tell me what I’m doing wrong?

The 3 biggest problems with that script are:
window.onloadthat way; see GM Pitfall #2: Event Handlers. Always useaddEventListener()or jQuery.There are some minor issues but first note that the entire existing script can be simplified to this, with jQuery:
(Important: This sample code will still not work.)
Handling the AJAX issues, it becomes:
(Which does work.)