effel: Browser Edge verweigert Zugriff auf iframe

Hallo, erstmal Danke für die Beiträge zu meinem html-Trxt-Problem!

habe aber jetzt ein neues Problem:

meine WebSocktServer(auf nodejs) mit WebSocket-Client Verbindung auf Browser Edge funktioniert hervorragend!!

Sorge bereitet mir die ClientWebseite auf dem Edge. dort habe ich ein iframe:

<div id="div_iframe1"               style="width:100%; height:60%; position:absolute; left:10px; top:-1000px; z-index:10;  visibility:visible;">
  <iframe src="about:blank" id="iframe_id1" name="iframe_target1" width="100%" height="100%">
  </iframe>
 </div>

zeichnung.html wird in nodej erstellt und gespeichert. "zeichnung.html" wird über die Socketverbindung in die ClientWebseite aufgenommen und ersetzt about.blank. Der Browser erkennt den Neueintrag und rendert. wunderbar !! Dann ist zeichnung.html,eine Konstruktionszeichung,sichtbar. Ok Ok Ich will die sichtbare Zeichnung ergänzen,Text hinzufügen und versuche an die Adresse des iframe zu kommen: V=window.frames[0]; Vd=V.document; und erhalte die Nachricht: Uncaught SecurityError: Failed to read a named property 'document' from 'Window': Blocked a frame with origin "null" from accessing a cross-origin frame. Die Sicherheit also - vor 10 Jahren hat das noch funktioniert!

Der Fehler kommt auch, wenn keine WebSocketVerbindung da ist. Es gibt eine Addon für Edge aber ich tu mich damit schwer. Gibt es Erfahrung mit dem Addon? Danke für Hilfe !! Effel

  1. Hallo effel,

    kommen Host-Dokument und zeichnung.html beide vom node.js?

    Oder ist da ein Unterschied im Origin (Schema, Hostname, Port)?

    Muss die Zeichnung ein vollständiges Dokument sein? Oder kannst du von Node aus auch nur ein Fragment liefern lassen, das du dann als innerHTML in ein div einsetzt?

    Rolf

    --
    sumpsi - posui - obstruxi
    1. Rolf,

      die zeichnung.html wird in Node zusammengebaut und dann mit dem fs-module write in den FileSystem von Windows geladen.

      Der Aufruf durch Client läst keinen Rückschluß auf Node zu, sondern ist aus FileSytem , also genau das, was der Browser ablehnt. Unfachmännisch habe ich den Aufruf durch den Clienten mit http://localhost:8443 versucht, aber ws kann wohl kein http Ich will mal versuchen, einen 2.Server, einen http-Server zu starten, also gleichzeitig WebSocket mit 8443 und httpServer mit 8008.

      Wenn das nicht hilft, dann das mit Fragment und innerHTML versuchen.

      Ich melde mich, wie es ausgeht.

      Effel

      1. Hallo effel,

        aber ws kann wohl kein http

        Irgendwie schon, weil ws auf http aufsetzt, aber das Websocket-Modul in Node.js ist kein Webserver, sondern ein Websocket-Server. Die Funktionalität ist unterschiedlich.

        Gleichzeitig WebSocket mit 8443 und httpServer mit 8008.

        Das sollte gehen; ich meine, ich hätte schon mal irgendwann einen Mix aus statischem und Websocket-Server in Node.js gebaut.

        D.h. du möchtest zeichnung.html in den Ordner schreiben, wo auch das Host-Dokument liegt, und dann Host-Dokument sowie Zeichnung via http://localhost:8008 holen? Kann gehen, ja.

        Könnte der Websocket-Server Dir das HTML-Fragment für die Zeichnung nicht als Websocket-Response zukommen lassen, statt es in ein HTML-Dokument zu verpacken und unter einem statischen Namen ins Filesystem zu rotzen? Letzteres ist eine schlecht skalierende Lösung (maximale Anzahl von gleichzeitigen Zeichnungen: 1); eine Rückgabe über die Socket-Verbindung wäre deutlichst flexibler.

        Rolf

        --
        sumpsi - posui - obstruxi
        1. Hallo Rolf,

          Der WebSockelServer:8443 und der httpServer:8080 laufen friedlich. Der httpServer ist das Beispiel aus selfhtml. Der Client muß mit:http://localhost:8080/neu.html und die iframes mit:

            <iframe src="http://localhost:8080/zeichnung.html" 
             id="iframe_id2" name="iframe_target2"
             width="100%" height="100%">
          

          aufgerufen, dann klappt es Über die WebSocketVerbindung erhält der Client den Namen der neuen Konstruktionszeichnung. Der wird dann mit Suffix:http://localhost:8080/ versehen. Edge erkennt die Veränderung und rendert.

          So erhalte ich die Adresse vom iframe und könnte Änderungen ausführen, aber so weit bin ich noch nicht.

          Deine Vorschläge werden ich mir in Ruhe durcharbeiten.

          Aber jetzt ist erstmal alles bestens

          Effel


          Beitrag formatiert. JürgenB