views:

571

answers:

2

I have a document which has a nested frameset. I need to access one of the nested frames, named "sq_main", and access content inside this frame. Here is my structure:

<html>
<head>
<title>Title</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<frameset rows="28,*" frameborder="0" border="0">
  <frame src="/_admin/?SQ_BACKEND_PAGE=header" name="sq_header" scrolling="no" marginwidth="0" marginheight="0">
  <frameset cols="380,10,*" frameborder="0" border="0" id ="main_frameset">
    <frame src="/_admin/?SQ_BACKEND_PAGE=sidenav" name="sq_sidenav" scrolling="no" marginwidth="0" marginheight="0">
    <frame src="/_admin/?SQ_BACKEND_PAGE=resizer" name="sq_resizer" scrolling="no" marginwidth="0" marginheight="0">
    <frame src="/_admin?SQ_BACKEND_PAGE=main&assetid=43&sq_from_frontend=1" name="sq_main" marginwidth="0" marginheight="0" scrolling="yes">
  </frameset>
</frameset>
<noframes></noframes>
</html>

Sadly, I can't change the code, that is why I need to access it with jQuery. I have tried to write a jQuery selector to access the "sq_main" frame, but no luck so far:

$('body', parent.frames[0].sq_main).prepend('<h1>TEST!!!!</h1>');

Ideas on how to drill down into this ugly structure? :)

+1  A: 
  1. Where is the body element?

  2. Try to navigate one step at a time. IIRC, the frames array only works with iframes. Try the selector frame[name = 'sq_main'] instead.

Aaron Digulla
I tried: alert($("frame[name = 'sq_main']").children('#sq-search-wait-popup-details').text()); But that does not seem to work..
Nic Hubbard
A: 

var sql_mainJQ = $("frame[name='sql_main']", top.document);

//$('body', sql_mainJQ.contents()).prepend("TEST!!!!"); // :( Bad

var frameContent = sql_mainJQ[0].contentDocument; if($.browser.msie){ frameContent = mainFrameJQ[0].contentWindow.document; } else { frameContent = mainFrameJQ[0].contentDocument; } $('body', sql_mainJQ.contents()).prepend("TEST!!!!"); // :> Maybe OK!

zensheno