Hi friends am Yogesh Nandane..Developing a small accessibility evaluation tool
There is one startframe() function which evaluates the frame accessibility errors.
I want to apply this startframe function to the frame content. by pointing the mouse pointer on the submitt button the website is get open in the frame then how do i call this startframe function into the frame so that it can evaluate the website errors which recentaly open in frame? the sample code is as below
<html> <head><title>Demo</title> <script type="text/javascript"> function test() { iframe = document.getElementById('i'); iframe.src = 'http://www.google.com'; } function test2() { iframe = document.getElementById('i'); iframe.src = 'http://www.webdeveloper.com'; } function test3() { iframe = document.getElementById('i'); iframe.src =startFrames() } This function I want to call function startFrames(){ //Instead of window. for global // we use aA. so that we don't have // variables that might get mixed in // with site-level js //aA holds all variable that are global // throughout frames //STANDARD ACROSS FAVELETS var aA=new Array(); //VAR SPECIFIC TO THIS FAVELET aA.f=0; //num frames aA.ff=0; //num iframes aA.ef=0; //num frames with errors aA.eff=0; //num iframes with errors aA.tiny=0; //num tiny frames // to save html nodes for // printing to results page aA.infoTree=document.createElement('div'); //VAR STANDARD ACROSS FAVELETS // for id of added spans // so we can removed them aA.idi=0; // for frames outside domain // so we can report them aA.framemsg=''; aA.fi=0; //STANDARD ACROSS FAVELETS & Recursive: // checkFrames calls function that checks the page. // Then, it calls itself for each doc in a frame // It returns aA with all the aA.variables counted up aA = checkFramesFrames(document,aA,aA.infoTree); //STANDARD - reporting once done recursing through frames provideMessageFrames(aA); //OPEN PAGE OF RESULTS if (aA.f + aA.ff > 0) { resultsPage(aA); }; } function checkFramesFrames(myDocument,aA,placeToAddTo){ //function with all the specific detail, just to keep it separate // it returns aA with new values after using it to count //run check for each frame's document if there // are any frames //create object just to check length of the properties array var jt_generic_obj = myDocument.createElement("var"); var jt_ie7 = false; if (jt_generic_obj.attributes.length > 0) { jt_ie7 = true; } var frametypes=new Array('frame','iframe'); for (var g=0;g<frametypes.length;g++) { //for each tag var myframes=myDocument.getElementsByTagName(frametypes[g]); for (var h=0;h<myframes.length;h++) { //for each frame //count the frames var t = myframes[h]; if (frametypes[g]=='frame') { aA.f++; } if (frametypes[g]=='iframe') { aA.ff++; //outline frame & resize frame if needed var toadd=0; if (t.width<72) { t.width=144; toadd=1; t.style.border='2px dotted red'; } if (t.height<72) { t.height=144; toadd=1; t.style.border='2px dotted red'; } if (toadd==0) { t.style.border='2px solid red'; } aA.tiny=aA.tiny+toadd; } // each frame gets a ul for reporting // attached to document at first, but // cloned for whichever doc is it used in var listAdd = document.createElement('ul'); listAdd.style.margin="0px 0px 0px 5px"; // create template li element that holds the error messages var error = document.createElement('li'); error.style.color="red"; error.style.fontFamily="arial,sans-serif"; error.style.fontSize="9pt"; error.style.fontWeight="bold"; //error.style.backgroundColor="#f5deb3"; // create template li element that holds the regular messages var info = document.createElement('li'); info.style.color="navy"; info.style.fontFamily="arial,sans-serif"; info.style.fontSize="9pt"; info.style.fontWeight="bold"; //info.style.backgroundColor="#f5deb3"; //get the frame info //type of frame var typeinfo = info.cloneNode(true); listAdd.appendChild(typeinfo); typeinfo.appendChild(document.createTextNode(frametypes[g])); //title if ((jt_ie7 && t.attributes.title.specified) || (!(jt_ie7) && t.hasAttribute('title'))) { var titleinfo = info.cloneNode(true); listAdd.appendChild(titleinfo); titleinfo.appendChild(document.createTextNode('title="'+t.title+'"')); } else { var titleerror = error.cloneNode(true); listAdd.appendChild(titleerror); titleerror.appendChild(document.createTextNode("Error: no title attribute")); if (frametypes[g]=='frame') { aA.ef++; } if (frametypes[g]=='iframe') { aA.eff++; } } //name if ((jt_ie7 && t.attributes.name.specified) || (!(jt_ie7) && t.hasAttribute('name'))) { var nameinfo = info.cloneNode(true); listAdd.appendChild(nameinfo); nameinfo.appendChild(document.createTextNode('name="'+t.name+'"')); } else { var nameerror = info.cloneNode(true); listAdd.appendChild(nameerror); nameerror.appendChild(document.createTextNode("No name attribute")); } //src if ((jt_ie7 && t.attributes.src.specified) || (!(jt_ie7) && t.hasAttribute('src'))) { var srcinfo = info.cloneNode(true); listAdd.appendChild(srcinfo); srcinfo.appendChild(document.createTextNode('src="')); var mySRClink = document.createElement('a'); mySRClink.setAttribute('href',t.src); mySRClink.appendChild(document.createTextNode(t.src)); srcinfo.appendChild(mySRClink); srcinfo.appendChild(document.createTextNode('"')); mySRClink.style.color="navy" } else { var srcerror = info.cloneNode(true); listAdd.appendChild(srcerror); srcerror.appendChild(document.createTextNode("No src attribute")); } //prepare structure to add some info to each frame's document try { var insideDocument = t.contentWindow.document; //remove anything added last time this favelet ran //create object just to check length of the properties array //need to check this for insideDocument specifically as it may //have a different doctype from containing document var jt_generic_obja = insideDocument.createElement("var"); var jt_ie7a = false; if (jt_generic_obja.attributes.length > 0) { jt_ie7a = true; } var myExpress1 = /fstAdded.*/; var divLive=insideDocument.getElementsByTagName('div'); //static (divs won't change - don't use divLive while editing page) var divs = new Array(); for (var i=0; i<divLive.length;i++) { divs[i] = divLive[i]; } for (var s=0;s<divs.length;s++) { if (((jt_ie7a && divs[s].attributes && divs[s].attributes.id.specified) || (!(jt_ie7a) && divs[s].hasAttribute('id'))) && myExpress1.test(divs[s].getAttribute('id'))) { divs[s].parentNode.removeChild(divs[s]); } } //create div with special id so we can remove it later var pageAdd = insideDocument.createElement('div'); pageAdd.id="fstAdded" + (aA.idi++); pageAdd.style.backgroundColor="#f5deb3"; pageAdd.style.opacity=".8"; pageAdd.style.filter="alpha(opacity=85)"; pageAdd.style.position="absolute"; pageAdd.style.left="0px"; pageAdd.style.top="0px"; pageAdd.style.zIndex="50"; //pageAdd.style.border="2px solid navy"; pageAdd.style.padding="3px"; //add ul var listAddinner = listAdd.cloneNode(true); listAddinner.style.margin="0px 0px 0px 0px"; listAddinner.style.padding="0px 0px 0px 14px"; pageAdd.appendChild(listAddinner); //s+=tag+'-'+(i+1)+'</li>\r'; //make the div the first thing in the inside doc if (insideDocument.body.childNodes.length>0) { insideDocument.body.insertBefore(pageAdd,insideDocument.body.childNodes[0]); } else { insideDocument.body.appendChild(pageAdd); } //recursion var newPlace = listAdd.cloneNode(true); checkFramesFrames(insideDocument,aA,newPlace); } catch(e) { var cant_reach = error.cloneNode(true); listAdd.appendChild(cant_reach); cant_reach.appendChild(document.createTextNode("This frame's document couldn't be written to or checked for additional frames.")); var newPlace = listAdd.cloneNode(true); //errors are stored in aA too aA.framemsg=aA.framemsg + '\n' + myframes[h].src + '\n\t' + e + '\n'; aA.fi=aA.fi + 1; t.style.border='5px double red'; } //SAVE INFO FOR RESULTS PAGE newPlace.style.margin="10px 0px 0px 27px"; if (placeToAddTo.tagName == 'ul') { var myLI = document.createElement('li'); placeToAddTo.appendChild(myLI); myLI.appendChild(newPlace); } else { placeToAddTo.appendChild(newPlace); } } } return aA; } function resultsPage(aA) { // Heading Above Lists var myH = document.createElement("h1"); myH.appendChild(document.createTextNode('This page has '+aA.f+' frames and '+aA.ff+' iframes:')); aA.infoTree.insertBefore(myH,aA.infoTree.childNodes[0]); try { var lw = window.open('','lw'); if (lw!=null) { if (lw.opener == null) { lw.opener = window; } // IE has no interface for DOM additions to pages // that were created using DOM, but we still use // DOM for most things and convert back to a string // here using innerHTML lw.document.open(); lw.document.write('<html><head><title>Report on Frame Accessibility</title></head><body>' + aA.infoTree.innerHTML + '</body></html>'); lw.document.close(); lw.focus(); } else { alert('Popup windows for frame report blocked.'); } } catch(err) { alert('Window is not available: ' + '\nBe sure to close the frame report window each time it opens.'); return false; } } function provideMessageFrames(aA) { var x_pl='s'; var w_pl='s'; var y_pl='s'; if (aA.x==1){x_pl=''}; if (aA.w==1){w_pl=''}; if (aA.y==1){y_pl=''}; if ((aA.f+aA.ff)==0) { var alertmessage = 'No frames or iframes'; } else { var alertmessage = aA.ef + ' errors out of '+aA.f+' frames and '+aA.eff+' errors out of '+aA.ff+' iframes.\n\nCheck out list of frames that opens next.'; } if(aA.tiny>0) { alertmessage = alertmessage + '\n\n' + aA.tiny + ' tiny iframes resized (shown with a dotted border)'; } var fi_pl='s'; if (aA.fi==1){fi_pl=''}; if (aA.fi>0) { alertmessage=alertmessage + '\n\n' + aA.fi + ' frame'+fi_pl+' (shown with a double border) outside the domain could not be checked for additional frames: \n' + aA.framemsg; } alert(alertmessage); } startFrames(); //--> </script> </head> <body> <a href="" target="i" onmouseover="" onmouseout="test2();test3()">submit</a> <iframe src="http://www.webdeveloper.com" id="i" name="i" width="400" height="400"></iframe> </body> </html>
Ads