Html-Code als IFRAME-Quelle und nicht als URL

Lesezeit: 7 Minuten

Html Code als IFRAME Quelle und nicht als URL
max

Dieser Standardcode für einen IFRAME, gibt es eine Möglichkeit, die src-URL durch nur HTML-Code zu ersetzen? Mein Problem ist also einfach. Ich habe eine Seite, auf der ein HTML-Text aus MYSQL geladen wird. Ich möchte diesen Code in einem Frame darstellen, damit er sich unabhängig vom Rest der Seite und in den Grenzen dieser bestimmten Umrandung darstellt.

<iframe src="http://example.com" name="test" height="120" width="600">You need a Frames Capable browser to view this content.</iframe>   

1645704126 181 Html Code als IFRAME Quelle und nicht als URL
eines Tages

Sie können dies mit einer Daten-URL tun. Dies umfasst das gesamte Dokument in einem einzigen HTML-String. Beispielsweise der folgende HTML-Code:

<html><body>foo</body></html>

kann so codiert werden:

data:text/html;charset=utf-8,%3Chtml%3E%3Cbody%3Efoo%3C/body%3E%3C/html%3E

und dann als einstellen src Attribut des Iframes. Beispiel.


Bearbeiten: Die andere Alternative ist, dies mit Javascript zu tun. Dies ist mit ziemlicher Sicherheit die Technik, die ich wählen würde. Sie können nicht garantieren, wie lange eine Daten-URL vom Browser akzeptiert wird. Die Javascript-Technik würde in etwa so aussehen:

var iframe = document.getElementById('foo'),
    iframedoc = iframe.contentDocument || iframe.contentWindow.document;

iframedoc.body.innerHTML = 'Hello world';

Beispiel


Bearbeiten 2 (Dezember 2017): Verwenden Sie die Html5 srcdoc Attribut, genau wie in Saurabh Chandra Patel‘s Antwort, die jetzt die akzeptierte Antwort sein sollte! Wenn du kannst IE/Edge effizient erkennenist ein Tipp zu verwenden srcdoc-polyfill Bibliothek nur für sie und das “reine” srcdoc-Attribut in allen Nicht-IE/Edge-Browsern (check caniuse.com um sicher zu sein).

<iframe srcdoc="<html><body>Hello, <b>world</b>.</body></html>"></iframe>

  • Internet Explorer-Unterstützung? Daten-URI kann keine HTML-Dateien in IE8 darstellen

    – franzlorenzon

    24. April 2013 um 12:05 Uhr

  • Gibt es eine Möglichkeit, hier Cross-Origin-Header bereitzustellen? Chrome beschwert sich immer wieder Blocked a frame with origin "http://localhost" from accessing a cross-origin frame.

    – jozxyqk

    3. Januar 2014 um 10:06 Uhr

  • @AndrewSwan Ich verstehe das Problem mit den einfachen Anführungszeichen nicht ganz. Kannst du mir ein Beispiel geben?

    – Septagramm

    27. Mai 2015 um 9:31 Uhr

  • Für jeden wie mich, der versucht hat, HTML auf diese Weise mit PHP zu codieren, möchten Sie rawurlencode (php.net/manual/en/function.rawurlencode.php)

    – Braiba

    2. Dezember 2015 um 13:27 Uhr

  • Beachten Sie, dass, wenn Sie verwenden innerHTML Der Browser führt keine untergeordneten Skript-Tags aus. Weitere Informationen finden Sie unter Abschnitt Sicherheitsüberlegungen der Element.innerHTML-MDN-Seite.

    – Leonid Wassiljew

    9. Februar 2017 um 6:49 Uhr


Html Code als IFRAME Quelle und nicht als URL
Saurabh Chandra Patel

verwenden html5‘s neues Attribut srcdoc (srcdoc-polyfill) Dokumente

<iframe srcdoc="<html><body>Hello, <b>world</b>.</body></html>"></iframe>

Browserunterstützung – Getestet in den folgenden Browsern:

Microsoft Internet Explorer
6, 7, 8, 9, 10, 11
Microsoft Edge
13, 14
Safari
4, 5.0, 5.1 ,6, 6.2, 7.1, 8, 9.1, 10
Google Chrome
14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24.0.1312.5 (beta), 25.0.1364.5 (dev), 55
Opera
11.1, 11.5, 11.6, 12.10, 12.11 (beta) , 42
Mozilla FireFox
3.0, 3.6, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 (beta), 50

  • Danke ! Ich brauchte eine Lösung für eine moderne Webkit-Webansicht, und das war bei weitem der einfachste Weg, dies zu tun!

    – Antoine Bolvy

    21. Juni 2015 um 4:13 Uhr

  • Es wird im IE nicht unterstützt

    – Kumpel

    7. Oktober 2015 um 11:43 Uhr

  • CanIUse.com sagt, dass der Support ziemlich schlecht ist: caniuse.com/#search=srcdoc

    – msquitieri

    27. Oktober 2015 um 17:00 Uhr


  • @msquitieri Nein, heißt es einheimisch Unterstützung schlecht, nicht die Füllwatte.

    – Wal

    5. Mai 2016 um 7:14 Uhr

  • Dies bricht jedoch ab, sobald Sie Anführungszeichen verwenden

    – Agil

    4. Oktober 2019 um 12:32 Uhr

Laut W3Schools können Sie dies in HTML 5 mit a tun neues “srcdoc”-Attributaber die Browserunterstützung scheint sehr begrenzt zu sein.

  • Es gibt auch ein Polyfill für srcdoc.

    – Uwe Keim

    2. September 2014 um 5:41 Uhr

  • @UweKeim Danke für den Vorschlag der Polyfill. Es ist leicht und funktioniert super.

    – Der Muffinmann

    16. Oktober 2014 um 4:16 Uhr

  • Entsprechend caniuse.com nur die berüchtigten IE- und Edge-Browser von Microsoft (außer Opera Mini) unterstützen das nicht srcdoc Attribut, es ist also NICHT “sehr begrenzt”. Benutz einfach srcdoc-polyfill für Microsoft-Benutzer.

    – Heitor

    26. Dezember 2017 um 4:36 Uhr


iframe srcdoc: Dieses Attribut enthält HTML Inhalt, der überschrieben wird Quelle Attribut. Falls ein Browser das nicht unterstützt srcdoc -Attribut, wird auf die URL in der zurückgegriffen Quelle Attribut.

Lassen Sie es uns anhand eines Beispiels verstehen

<iframe 
    name="my_iframe" 
    srcdoc="<h1 style="text-align:center; color:#9600fa">Welcome to iframes</h1>"
    src="https://www.birthdaycalculatorbydate.com/"
    width="500px"
    height="200px"
></iframe>

Ursprünglicher Inhalt wird übernommen iframes.

1645704127 216 Html Code als IFRAME Quelle und nicht als URL
G-Cyrillus

Ich habe eine Seite, die einen HTML-Körper aus MYSQL lädt. Ich möchte diesen Code in einem Frame präsentieren, damit er sich unabhängig vom Rest der Seite und in den Grenzen dieser spezifischen Umrandung darstellt.

Ein object mit einem uncodierten dataUri hätte möglicherweise auch Ihren Anforderungen entsprochen, wenn nur ein Teil des Datentexts geladen werden sollte:

Der HTML-Code <object> -Element stellt eine externe Ressource dar, die als Bild, verschachtelter Browsing-Kontext oder als von einem Plug-in zu handhabende Ressource behandelt werden kann.

body {display:flex;min-height:25em;}
p {margin:auto;}
object {margin:0 auto;background:lightgray;}
<p>here My uploaded content: </p>
<object data="data:text/html,
  <style>

.table {
  display: table;
  text-align:center;
  width:100%;
  height:100%;
}

.table > * {
  display: table-row;
}

.table > main {
  display: table-cell;
  height: 100%;
  vertical-align: middle;
}
</style>


<div class="table">
  <header>
    <h1>Title</h1>
    <p>subTitle</p>
  </header>

  <main>
    <p>Collection</p>
    <p>Version</p>
    <p>Id</p>
  </main>

  <footer>
    <p>Edition</p>
  </footer>">

</object>

Aber behalten Sie Ihre Iframe-Idee bei, Sie könnten Ihren HTML-Code auch in Ihr Iframe-Tag laden und ihn als srcdoc-Wert festlegen. Sie sollten sich nicht um Anführungszeichen kümmern oder ihn in einen dataUri umwandeln, sondern nur einmal onload auslösen.

Das HTML-Inline-Frame-Element (<iframe>) stellt einen verschachtelten Browsing-Kontext dar, der eine andere HTML-Seite in die aktuelle einbettet.

Beide Iframes unten werden dasselbe rendern, einer erfordert zusätzliches Javascript.

Beispiel Laden eines vollständigen Dokuments:

body {
  display: flex;
  min-height: 25em;
}

p {
  margin: auto;
}

iframe {
  margin: 0 auto;
  min-height: 100%;
  background:lightgray;
}
<p>here my uploaded contents =>:</p>
  <iframe srcdoc="<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
  "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title></title>
  <style>
html, body {
  height: 100%;
  margin:0;
}

body.table {
  display: table;
  text-align:center;
  width:100%;
}

.table > * {
  display: table-row;
}

.table > main {
  display: table-cell;
  height: 100%;
  vertical-align: middle;
}
</style>
</head>

<body class="table">
  <header>
    <h1>title</h1>
    <p>injected via <code>srcdoc</code></p>
  </header>

  <main>
    <p>Collection</p>
    <p>Version</p>
    <p>Id</p>
  </main>

  <footer>
    <p>Edition</p>
  </footer>
</body>
</html>">

</iframe>

  <iframe onload="this.setAttribute('srcdoc', this.innerHTML);this.setAttribute('onload','')">
    <!-- below html loaded -->
    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
      "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml">

    <head>
      <title>Test</title>
      <style>
        html,
        body {
          height: 100%;
          margin: 0;
          overflow:auto;
        }
        
        body.table {
          display: table;
          text-align: center;
          width: 100%;
        }
        
        .table>* {
          display: table-row;
        }
        
        .table>main {
          display: table-cell;
          height: 100%;
          vertical-align: middle;
        }
      </style>
    </head>

    <body class="table">
      <header>
        <h1>Title</h1>
        <p>Injected from <code>innerHTML</code></p>
      </header>

      <main>
        <p>Collection</p>
        <p>Version</p>
        <p>Id</p>
      </main>

      <footer>
        <p>Edition</p>
      </footer>
    </body>

    </html>
    </iframe>

842910cookie-checkHtml-Code als IFRAME-Quelle und nicht als URL

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy