2010-05-31 10 views
9

में एक्सेस फ्रेम मेरे पास एक दस्तावेज़ है जिसमें नेस्टेड फ़्रेमसेट है। मुझे "sq_main" नामक नेस्टेड फ्रेमों में से एक तक पहुंचने की आवश्यकता है, और इस फ्रेम के अंदर सामग्री एक्सेस करें। यहां मेरी संरचना है:jQuery: नेस्टेड फ्रेमसेट

<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> 

अफसोस की बात है, मैं कोड नहीं बदल सकता, इसलिए मुझे इसे jQuery के साथ एक्सेस करने की आवश्यकता है। मैं "sq_main" फ्रेम पहुँचने के लिए एक jQuery चयनकर्ता लिखने की कोशिश की है, लेकिन कोई किस्मत अब तक: कैसे इस बदसूरत संरचना में प्रवेश करने की पर

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

विचार? :)

+0

मैं 'नहीं मिल सकता है अपने उदाहरण में sq_main'; 'sq_main' की सामग्री से ऊपर कोड है या उदाहरण में कुछ याद आ रही है? –

+0

हां, यह उदाहरण में सही है, यह अंतिम फ्रेम है। –

उत्तर

9

एक समय में एक कदम नेविगेट करने का प्रयास करें। आईआईआरसी, frames सरणी केवल iframes के साथ काम करता है। इसके बजाय चयनकर्ता frame[name = 'sq_main'] आज़माएं।

Ronny Sherer द्वारा उदाहरण:

var frameDocument = $('frame[name="mainFrame"]', top.document)[0].contentDocument; 
$(frameDocument).find('body').prepend('<h1>TEST!!!!</h1>'); 
+0

मैंने कोशिश की: चेतावनी ($ ("फ्रेम [name = ।। 'sq_main'] ") बच्चों ('# वर्ग-खोज-प्रतीक्षा-पॉपअप विवरण') पाठ()); लेकिन यह काम नहीं लग रहा है .. –

+0

पुन 1, शरीर तत्व के बजाय फ्रेमसेट का उपयोग किया जाना चाहिए: http://www.w3schools.com/tags/tag_frameset.asp – starwed

+0

@starwed: धन्यवाद, मैंने अपना जवाब तय कर लिया है । –

4
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! 
0
<html> 
<head> 
    <title>frames.html</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
</head> 
<frameset rows="100,*" frameborder="1" border="2"> 
       <frame src="helloworld.html" name="sq_header" id="sq_header" scrolling="yes" marginwidth="0" marginheight="0"> 
        <frameset cols="380,300,*" frameborder="1" border="2" id ="main_frameset"> 
        <frame src="helloworld.html" name="sq_sidenav" id="sq_sidenav" scrolling="yes" marginwidth="0" marginheight="0"> 
        <frame src="anotherpage.html" name="sq_resizer" id="sq_resizer" scrolling="yes" marginwidth="0" marginheight="0"> 
        <frame src="helloworld.html" name="sq_main" id="sq_main" marginwidth="0" marginheight="0" scrolling="yes"> 
        </frameset> 
        </frameset> 
<noframes> 
</noframes> 
</html> 
<html> 
<head> 
    <title>anotherpage.html</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 

    <script type="text/javascript" src="http://www.google.com/jsapi"></script> 

    <script type="text/javascript"> 
        //http://encosia.com/3-reasons-why-you-should-let-google-host-jquery-for-you/ 
        // You may specify partial version numbers, such as "1" or "1.3", 
        // with the same result. Doing so will automatically load the 
        // latest version matching that partial revision pattern 
        // (e.g. 1.3 would load 1.3.2 today and 1 would load 1.7.2). 
        google.load("jquery", "1.6.2"); 

        google.setOnLoadCallback(function() { 
        // Place init code here instead of $(document).ready() 
        }); 
    </script> 

    <script language="Javascript"> 
       var d = new Date(); 
       var n = d.getTime(); 

       $(document).ready(function(){ 
        $('#title').html($("title").html()); 
/* 
this is to work in safari 
see "Updated answer provided below....looks like a setTimeout maybe needed as the  frames aren't loaded when the initial startup script runs. – David Hoerster Aug 21 '10 at 16:38 
url: http://stackoverflow.com/questions/3534082/jquery-access-table-inside-a-frame 
*/ 
setTimeout(writemsg, 2000); 
function writemsg() { 
        $('#helloworld',top.frames["sq_main"].document).html("Write from "+ $("title").html()+" in sq_main at "+ n); 
} 
        }); 

    </script> 

</head> 
<body> 
    <div id="title"> 
    </div> 
    </p> 
    <div id="helloworld"> 
     Hello World JQuery!</div> 
</body> 
</html> 
<html> 
<head> 
    <title>helloworld.html</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 

    <script type="text/javascript" src="http://www.google.com/jsapi"></script> 

    <script type="text/javascript"> 
        //http://encosia.com/3-reasons-why-you-should-let-google-host-jquery-for-you/ 
        // You may specify partial version numbers, such as "1" or "1.3", 
        // with the same result. Doing so will automatically load the 
        // latest version matching that partial revision pattern 
        // (e.g. 1.3 would load 1.3.2 today and 1 would load 1.7.2). 
        google.load("jquery", "1.6.2"); 

        google.setOnLoadCallback(function() { 
        // Place init code here instead of $(document).ready() 
        }); 
    </script> 

    <script language="Javascript"> 
       $(document).ready(function(){ 
        $('#title').html($("title").html()); 
        }); 

    </script> 

</head> 
<body> 
    <div id="title"> 
    </div> 
    </p> 
    <div id="helloworld"> 
     Hello World JQuery!</div> 
</body> 
</html>