2009-08-04 10 views
2

Ich verwende derzeit einen IFrame, um von Benutzern generierte Inhalte auf einer Website zu sandboxieren. Dies beseitigt jegliche Styling-Probleme mit unseren Haupt-Stylesheets.Erzwinge eine beliebige HREF in einem IFrame, um das übergeordnete Element als Ziel zu verwenden

Wenn jedoch ein Benutzer eine Verknüpfung mit unserem Rich-Text-Editor erstellt, möchten wir, dass die Verknüpfung im übergeordneten Element geöffnet wird und nicht nur die Verknüpfung im IFrame geöffnet wird. Ich weiß, dass Sie ein Ziel für den Eltern festlegen können, aber wir haben keine Kontrolle über den Benutzer und was sie in ihren Inhalt eingeben.

Gibt es eine Möglichkeit, die HREFs innerhalb des IFrame zu entführen, so dass sie alle Eltern ansteuern, ohne sie zu modifizieren? Oder benutze ein bisschen Javascript, das universell injiziert werden kann, so dass ich nicht den ganzen Inhalt durchforsten muss und das Ziel programmatisch ersetzen muss?

Idealerweise wäre ein einfaches Skript an einer Stelle die beste Lösung.

Gedanken?

END LÖSUNG

benutzte ich eine Variation der Antwort, die ich ausgewählt ... Es hat mich in die richtige Richtung.

<script> 
    Event.observe(window, 'load', function() { 
    $$('a').each(function(e) { 
     e.writeAttribute('target', '_parent'); 
    }); 
    }); 
</script> 

Das ist in der IFrame mit dem Inhalt. Es war am Ende die einfachste Lösung für die Aufgabe.

Antwort

2

verwenden, es zu schaffen, und Sie werden mit dem $ body variablen Zugriff auf alle Teile haben:

$(function() { 
     var $frame = $('<iframe style="width:200px; height:100px;">'); 
     $('body').html($frame); 
     setTimeout(function() { 
      var doc = $frame[0].contentWindow.document; 
      var $body = $('body',doc); 
      $body.html('<h1>Test</h1>'); 
     }, 1); 
    }); 

So können Sie dann dieses hier gefunden

$('a', $body).attr('target', '_parent'); 

so etwas wie tun: http://groups.google.com/group/jquery-en/browse_thread/thread/fb646741a6192540

+0

Pardon meine Unwissenheit und Mangel an Javacript-fu, aber dieses Stück Code gegeben, scheint es, es baut einen IFrame und den Inhalt im Inneren, richtig? Wo kommt das Zwingen des Ziels auf HREFs ins Spiel? Ihre Antwort vor der Bearbeitung hat mir ein wenig mehr Sinn gemacht. – mwilliams

+0

Ahhhh ok, ich kann nicht mit deinen Bearbeitungen Schritt halten :) Werde das mal versuchen ... Danke! – mwilliams

+0

Ich neige dazu, zu bearbeiten ... viel. Hauptsächlich wegen der schnellen Geschwindigkeit der Foren –

1

Gleiche Domäne im Iframe? Ja.

<script type="text/javascript"> 
function hijacklinks(iframe){ 
    var as = iframe.contentDocument.getElementsByTagName('a'); 
    for(i=0;i<as.length;i++){ 
    as[i].setAttribute('target','_parent'); 
    } 
} 
</script> 

<iframe src="http://example.com/test.html" onload="hijacklinks(this)"></iframe> 

Andere Domäne im Iframe? Nr

<iframe src="http://www.google.com/search?q=google+happy" onload="hijacklinks(this)"></iframe> 

ergibt eine "Erlaubnis bekommen Eigenschaft HTMLDocument.getElementsByTagName verweigert".

Es mag Wege geben, aber zumindest mit einfachem JavaScript sind sie ein paar Schutzmechanismen gegen Iframes, die mit Sites mucken (stellen Sie sich einen bösartigen Rahmen um die Website einer Bank vor und Sie verstehen warum).

0

Ich habe rund um die Cross-Domain-Ausgabe über Ajax ..

function runAjaxDone(response) { 
      $('body').html(response); 
     } 
     function callAjax(url) { 
      $.ajax({ url: url + '&r=' + Math.random(), success: runAjaxDone }); 
      return false; 
     } 

<a runat="server" href="#" 
         onclick='<%# "callAjax(\"http://partners.thevoiceinternet.com/portal/Customer/Report/AgentReport.aspx?AgentID="+Eval("AgentID").ToString()+"&name="+Server.UrlEncode(Eval("SubAgentName").ToString())+"\"); return false;" %>'> 
         <asp:Label ID="lbl" runat="server" Text='<%# Eval("SubAgentName") %>'></asp:Label></a> 

Da der übergeordneten Frame zugegriffen werden kann nicht, ersetzt ich den Körper über Ajax.

0

einfachste Antwort:

<head> 
    <base target="_blank"> 
</head> 
Verwandte Themen