• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

iFrame Links abfangen

KtmnjjpfjsFvzG

New member
Hi,

ich habe ein Problem: Ich zeige eine Seite in einem iFrame an, und zwar per srcdoc. Auf dieser Seite befinden sich auch <a>-Tags, also Links. Wenn man auf einen dieser Links klickt, soll sich dieser in einem neuen Tab öffnen.

Das Problem ist, dass die Links keinen target="_blank" o.ä. gesetzt haben, deshalb öffnen sie sich immer im iFrame. Das ist natürlich ungünstig...

Was kann man da machen?
 
srcdoc ist seit HTML5 neu hinzugekommen, wenn der Browser dieses Attribut also unterstützt sollte es funktionieren.

Was das Link ändern angeht, so wirst du da eventuell mit JS weiterkommen. Du kannst ja mal versuchen ein Element im IFrame mittels JS anzusprechen. Ich vermute aber, dass du die Attribute des Link garnicht ändern kannst. Was ist das denn für ein IFrame bzw. welche Seite wird da eingebunden?
 
Verschiedener Content, das ganze soll mit allen möglichen HTML-Dokumenten funktionieren... Diese sind in einer Datenbank gespeichert und werden per AJAX geladen und dann ins srcdoc geschrieben. Habs aber mittlerweile ausprobiert und sehe: Zugriff aufs contentWindow hab ich nur, wenn ich bei der iframe-sandbox allow-same-origin hinzufüge. Ist das sicher? Ich meine, es sind ja keine Scripts erlaubt im Frame, und die Links fange ich eh ab, was soll also passieren?
 
Ich würde ja srcdoc noch nicht verwenden, da es noch nicht einmal der IE11 unterstützt.

Aber wenn das HTML sowieso aus deiner DB kommt kannst du bei den Links doch ein target="_blank" hinzufügen, bevor du das HTML in die DB schreibst... oder wenn du es rausholst.
 
Ja, finde ich jetzt nicht so super schön
Darf ich fragen warum?

Das ist eigentlich eine saubere Lösung. Die Links stehen ja sowieso in der DB, also können diese auch noch ein target bekommen. Du könntest beim Eintragen sogar noch abfangen, ob es ein target=blank oder ein target=self sein soll.
 
Naja, ich möchte so wenig wie möglich den HTML-Code eingreifen. Dieser wurde ja nicht von mir selbst generiert, sondern kommt von extern. So muss ich dann halt per Regex alles replacen, geht natürlich, aber ich finds halt unschön...
 
Achso, dass ist garnicht dein HTML Code. Dann ist natürlich was anderes. Ich dachte, der Code wäre von dir...
 
Wenn der Code von extern kommt, solltest du ihn sowieso validieren. Und mit RegExp musst du auch nicht arbeiten: du kannst ja auf der Serverseite das HTML parsen, dann den DOM-Baum manipulieren und dann das erzeugte HTML wegspeichern.
 
Ja klar, aber wenn ich den gesamten DOM parse und wieder ausgebe ist das ja ziemlich resourcenintensiv, da ist regex bestimmt etwas schneller (oder?)

und was soll ich da groß validieren? das zeug kommt ja ins frame, wenn's nicht valide ist, kümmert sich der browser drum...
 
Wie willst du denn mit einer RegExp erkennen, ob ein <a> schon ein target="_blank" hat oder nicht... oder ob es überhaupt ein href hat?

Und die Geschwindigkeit ist jetzt auch nicht das Problem, wenn du das machst, bevor du in die DB schreibst, da du es ja nur ein einziges mal machen musst.

Mit validieren meine ich, dass du Dinge, die du nicht haben willst, entfernst. Browser können die seltsamsten Bugs haben, über die dann deine "Weiterleitung" zur Verbreitung von Schadsoftware genutzt werden kann.
 
Das kann ich nicht vorher machen, da die Datenbank auch noch von anderen Programmen ausgelesen wird (hab also praktisch nur lesezugriff).

Wenn Browser Bugs haben, dann ist das ein Problem, das nun mal existiert. Wenn z.B. Chrome 40 einen Fehler hat, dass der PC immer abstürzt, wenn auf einer Seite die Zahl 5000000 vorkommt, dann kann ja von mir nicht erwartet werden, dass ich jedes auszugebende Dokument auf "5000000" scanne, und das im Zweifelsfall entferne. Ich muss also darauf vertrauen, dass es mit einem Sandboxed <iframe> nicht zu Sicherheitsproblemen kommt.

Und das mit dem schon existierenden target und dem href, da muss ich mir halt ein passendes RegEx zusammen bauen, bin mir sicher, dass das geht.
 
Ich muss also darauf vertrauen, dass es mit einem Sandboxed <iframe> nicht zu Sicherheitsproblemen kommt.
Du bist verantwortlich für den Inhalt deiner Seite und soweit ich weiß (kein Gewähr - ich bin kein Anwalt) bist du dann auch haftbar, wenn dadurch Schaden entsteht.

Und das mit dem schon existierenden target und dem href, da muss ich mir halt ein passendes RegEx zusammen bauen, bin mir sicher, dass das geht.
Das würde ich gerne sehen. Und ich bin mir ziemlich sicher, dass so eine RegExp dann langsamer ist, als das HTML zu parsen und das DOM aufzubauen...
 
Du bist verantwortlich für den Inhalt deiner Seite und soweit ich weiß (kein Gewähr - ich bin kein Anwalt) bist du dann auch haftbar, wenn dadurch Schaden entsteht.
Man kann sich teilweise von dieser Haftung ausschließen. Hier mal ein Auszug aus dem Gesetzestext (Frei übersetzt):
Als Diensteanbieter sind wir gemäß § 7 Abs.1 TMG für eigene Inhalte auf diesen Seiten nach den allgemeinen Gesetzen verantwortlich. Nach §§ 8 bis 10 TMG sind wir als Diensteanbieter jedoch nicht verpflichtet, übermittelte oder gespeicherte fremde Informationen zu überwachen oder nach Umständen zu forschen, die auf eine rechtswidrige Tätigkeit hinweisen. Verpflichtungen zur Entfernung oder Sperrung der Nutzung von Informationen nach den allgemeinen Gesetzen bleiben hiervon unberührt. Eine diesbezügliche Haftung ist jedoch erst ab dem Zeitpunkt der Kenntnis einer konkreten Rechtsverletzung möglich. Bei Bekanntwerden von entsprechenden Rechtsverletzungen werden wir diese Inhalte umgehend entfernen. [...]


(Alles ohne Gewähr, bin auch kein Anwalt...)
 
Zurück
Oben