2016-05-04 17 views
1

Ich habe eine Seite, die ein iframe Element enthält. Dieser iFrame enthält zwei Ebenen von document in ihm.jquery access element innerhalb iFrame

Hier ist die kurze Version des Codes (die meisten Sachen wie sonst entfernt wäre es zu groß sein)

<iframe src="some soruce" width="863" height="486" frameborder="0" scrolling="no"> 
    <html> 
     <head>...</head> 
      <body> 
       <iframe id="player" src="some source" width="863" height="486" frameborder="0" scrolling="no"> 
       <html> 
        <head>...</head> 
        <body> 
         <div id="mediaplayer_wrapper" style="position: relative; width: 863px; height: 486px;"> 
         <object type="application/x-shockwave-flash" data="/new-flash-player/player.swf" width="100%" height="100%" id="mediaplayer" name="mediaplayer" tabindex="0"></div></div> 
         <div id="banners_area" style="position: absolute; top: 0px; left: 0px; width: 863px; height: 486px; display: none; background-color: white;"> 
           <br> 
         </div> 
        </div> 
        </body> 
       </html>    
       </iframe> 
     </body> 
    </html> 
</iframe> 

Was ich bin versucht, über jQuery das mediaplayer Objekt zuzugreifen und löst eine Funktion darauf. Ich habe folgendes versucht:

var p = jQuery("mediaplayer"); 
p.hideGate(); 

und auch

var p = $("#iFrame").contents().find("#mediaplayer"); 
p.hideGate(); 

aber keiner von ihnen gearbeitet haben. (Gab mir einen Fehler, dass hideGate nicht definiert ist. Wenn jedoch unter Entwicklern ich mich auf den Inhalt des jeweiligen Spielers wechseln, und führen Sie den ersten Code, funktioniert es plötzlich.

enter image description here

Was soll ich tun falsch hier wie komme ich nicht die Funktion auslösen können

+0

Haben Sie Zugriff auf alle diese Dokumente? –

+0

Sie haben #player iframe in äußeren iframe mit src = "einige soruce" eingebettet. Das ist seltsam, da der Inhalt des äußeren Iframes alles ist, was "in sorce" ist und nicht das, was Sie in Ihrem Code inline geschrieben haben. Somit ist der innere iframe #player nicht zugänglich. –

Antwort

1

hideGate ist keine Standard-jQuery-Methode. Es muss von einem Plugin bereitgestellt werden.

Sie haben mehrere Dokumente, und dieses Plugin wird in die Version von jQuery geladen, die sich im gerahmten Dokument mit dem Element #mediaplayer befindet.

Wenn Sie jQuery vom übergeordneten Frame aufrufen, verwenden Sie die Version von jQuery, die nicht das Plugin installiert hat.

Sie können dies wahrscheinlich lösen, indem Sie das Plug-in-Skript in das Dokument im übergeordneten Frame laden.

Andernfalls müssen Sie die jQuery Funktion aus dem Dokument im Rahmen aufrufen. (Möglicherweise $("#iFrame")[0].contentWindow.jQuery("#mediaplayer") würde das tun, aber ich habe keine Zeit, einen Testfall zu schreiben, um sicher zu sein, gerade jetzt).

+0

scheint so zu sein hat tatsächlich funktioniert. Obwohl es heißt, dass ich blockiert bin, habe ich es eindeutig gefunden. Ich bekomme grundsätzlich "blockiert einen Frame mit Ursprung aus dem Zugriff auf einen Cross-Origin Frame" –

Verwandte Themen