prompt in iframe

Schon festgestellt? Dem Forum sind gerade alle Interaktionsmöglichkeiten genommen. :(

Mehr dazu unter: Abstimmung über das Forum

  • Sehr geehrte Community,


    das ist mein erster Beitrag hier. Ich habe zwar die SuFu und Mr. Google bemüht, aber nichts gefunden was hilft, bzw. was ich verstehe.

    Problem ist eigentlich übersichtlich:

    Ich habe eine Applikation (LogoControl) welche wohl in HTML geschrieben ist. (Allerdings als index.st) abgelegt.

    Hier gibt es folgenden abschnitt:

    Code
    1. // set attribute
    2. function setDeviceAttribute(deviceId, attributeId, attributeName, currentValue) {
    3. var newValue = prompt("Attributwert \"" + attributeName + "\" ändern:", currentValue);
    4. if (newValue != null) {
    5. jQuery.get('rest/devices/' + deviceId + '/attributes/' + attributeId + '/valueText?set=' + newValue);
    6. }
    7. }

    Dieser sorgt dafür das alle in der config.xml als "attribute" makierten felder, beim klicken ein prompt Fenster öffnen, in welchen der neue Wert eingetragen werden kann.

    Nun das funktioniert auch einwandfrei, wenn die die Seite direkt aufrufe.

    Allerdings kommt kein Prompt Fenster mehr, wenn ich diese Seite über ein iframe einbinde. Das mache ich deswegen, weil es 3 Seiten gibt. Auf jeden ist der selbe iframe Link, nur eben unterschiedlich groß und somit unterschiedlich beschnitten.


    Wie bekomme ich es nun hin, das trotz iframe das Prompt kommt?


    iframe ist auf einer Joomla Seite (in einen Beitrag) eingebunden.

    Sowohl die Seite im iframe (127.0.0.1/index.st) als auch die Joomlaseite liegen local auf einen Linux-Server (linaro mit Appache, MySQL und PHP) welcher offline ist.



    Vielen lieben dank.

  • hast du auf allen Seiten auch Jquery eingebunden? Auch auf der wo der iframe eingebunden wird?


    Hast du mal ein Link dazu ? Dann kann man mal genaue kucken wo der Fehler ist.

    Das hier allein kann eigentlich nicht der Fehler sein ,normalerweise müßte der iframe auch so gehen,aber ich hatte so ein Fehler mal in der art gehabt.


    Wahrscheinlich stört ein anderes Script oder datei oder sowas ,was auf der hauptseite nicht ist

    Dieser Beitrag wurde bereits 2 Mal editiert, zuletzt von basti1012 ()

  • Wie gesagt ist die Seite offline (im moment hat der Server noch Internetzugang. Sie dient für eine Visualisierung einer SPS.


    Laut Seitenquelltext sollte jQuery auf der iFrame Seite aktiv sein:



    Hier noch der auszug aus meiner index.php aus dem Joomla Template:


    <!DOCTYPE html>
    <html lang="de-de" dir="ltr"
    class='com_content view-article itemid-1422 j38 '>

    <head>
    <base href="http://192.168.2.21/index.php/waschboxen/waschbox-1" />
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <meta name="author" content="Super User" />
    <meta name="generator" content="Joomla! - Open Source Content Management" />
    <title>Waschbox 1</title>
    <link href="/templates/purity_iii/favicon.ico" rel="shortcut icon" type="image/vnd.microsoft.icon" />
    <link href="http://192.168.2.21/index.php/component/search/?Itemid=1422&amp;format=opensearch" rel="search" title="Suchen JBTTouch" type="application/opensearchdescription+xml" />
    <link href="/t3-assets/css/css-fc37d-78807.css" rel="stylesheet" type="text/css" media="all" attribs="[]" />
    <link href="/t3-assets/css/css-0c4ce-78816.css" rel="stylesheet" type="text/css" media="all" attribs="[]" />
    <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet" type="text/css" />
    <script type="text/javascript" src="http://gc.kis.v2.scr.kaspersky…9B23-F09B4E847056/main.js" charset="UTF-8"></script><script src="/media/jui/js/jquery.min.js?4c902ff0c60fddbd52c19736569792b1" type="text/javascript"></script>
    <script src="/t3-assets/js/js-1ea8c-71789.js" type="text/javascript"></script>
    <script src="http://192.168.2.21:8111/jquery.js" type="text/javascript"></script>
    <script src="/t3-assets/js/js-6606b-66308.js" type="text/javascript"></script>
    <script type="text/javascript">
    jQuery(window).on('load', function() {
    new JCaption('img.caption');
    }); jQuery(function($){ $(".hasTooltip").tooltip({"html": true,"container": "body"}); }); jQuery.noConflict();
    </script>

    <!-- META FOR IOS & HANDHELD -->
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
    <style type="text/stylesheet">
    @-webkit-viewport { width: device-width; }
    @-moz-viewport { width: device-width; }
    @-ms-viewport { width: device-width; }
    @-o-viewport { width: device-width; }
    @viewport { width: device-width; }
    </style>
    <script type="text/javascript">
    //<![CDATA[
    if (navigator.userAgent.match(/IEMobile\/10\.0/)) {
    var msViewportStyle = document.createElement("style");
    msViewportStyle.appendChild(
    document.createTextNode("@-ms-viewport{width:auto!important}")
    );
    document.getElementsByTagName("head")[0].appendChild(msViewportStyle);
    }
    //]]>
    </script>
    <meta name="HandheldFriendly" content="true"/>
    <meta name="apple-mobile-web-app-capable" content="YES"/>
    <!-- //META FOR IOS & HANDHELD -->
    <!-- Le HTML5 shim and media query for IE8 support -->
    <!--[if lt IE 9]>
    <script src="//html5shim.googlecode.com/svn/trunk/html5.js"></script>
    <script type="text/javascript" src="/plugins/system/t3/base-bs3/js/respond.min.js"></script>
    <![endif]-->
    <!-- You can add Google Analytics here or use T3 Injection feature -->
    <!--[if lt IE 9]>
    <link rel="stylesheet" href="/templates/purity_iii/css/ie8.css" type="text/css" />
    <![endif]-->
    </head>



    Code
    1. // no direct access
    2. defined('_JEXEC') or die;
    3. // Listing 1
    4. // Instanz von JDocument erzeugen
    5. $doc = JFactory::getDocument();
    6. // jQuery Bibliothek vom Google-CDN hinzuf&uuml;gen
    7. $doc->addScript('http://192.168.2.21:8111/jquery.js');
    8. // jQuery Code zum Initialisieren
    9. $doc->addScriptDeclaration('jQuery.noConflict();');


    Die verwendete jquery.js also 192.168.2.21:8111/jquery.js ist die, welche auch die Seite im iFrame verwendet. (und die funktioniert ja bei direkten aufruf)


    iframe eintrag im Beitrag:


    Code
    1. <iframe id="wb1" width="1100" height="400" scrolling="no" frameBorder="0" src="http://192.168.2.21:8111"></iframe>


    Vielen Dank für die Hilfe

  • Strg-Umsch-I bzw. F12 im IE. Dort findest Du einen Reiter "Console", wo Fehlermeldungen etc. ausgegeben werden.

    Ich habe es übrigens mal ausprobiert und es hat einwandfrei funktioniert, auch Crossdomain.

  • Richtig im IE funktioniert das, aber in Chrom nicht und vorallem im FullyKiosk Browser nicht. Auch nicht wenn ich den IE als Fake Agent String imitiere.

    Eine Idee wie man das auch in Chrom/Chromium zum laufen bekommt?

  • Sorry:

    Hier


    Uncaught DOMException: Blocked a frame with origin "http://192.168.2.21:8111" from accessing a cross-origin frame.

    at setDeviceAttribute (http://192.168.2.21:8111/:27:24)

    at <anonymous>:1:1

    setDeviceAttribute @ (index):27

    (anonymous) @ VM342:1

  • Also offenbar ein Cross-Origin-Problem. Wird die Seite in dem iFrame denn überhaupt angezeigt?

    Verstehe ich das richtig: Die Elternseite ist Joomla und liegt auf einem lokalen Webserver. Die Kindseite, die in dem iFrame angezeigt werden soll, liegt auf einem anderen Webserver, den die SPS bereit stellt?

    Es gibt zu diesem Problem einiges bei Stackoverflow:

    https://stackoverflow.com/ques…iframe-cross-domain-issue

    Zitat

    You need control over the domain you want to embed to remove/amend its CORS policy. It the domain has explicitely blocked Cross-Origin requests, there's nothing you can do about it.

    Wahrscheinlich hast Du ja Zugriff auf die SPS?

  • Jaein,

    Es läuft ein Asus Tinker Board als Server. Hierrauf läuft zum einen Joomla auf Appache und einmal der zweite Dienst, der selbst auch etwas Hostet.

    Joomla: 192.168.2.21/index.php

    Dienst: 192.168.2.21:8111/index.st


    Auf der Joomlapage ist ein iframe zur Dienstseite

    <iframe ....:"192.168.2.21:8111"..>

    Diese wird auch angezeigt. Auch die Buttons auf dieser Seite funktionieren.


    Code
    1. // call method
    2. function callDeviceMethod(deviceId, methodId) {
    3. jQuery.get('rest/devices/' + deviceId + '/methods/' + methodId);
    4. }


    und auch die Statusabfragen der Seite laufen


    Nur eben die prompt Funktion nicht.


    Wenn ich die Dienstseite 192.168.2.21:8111 direkt aufrufe, funktioniert alles prima.
    Nur eben im iframe nicht.

  • Ich verstehe das Ganze nicht mehr richtig. Wo ist denn da die SPS, von der Du weiter oben geschrieben hast?

    Ohne es richtig zu verstehen, könntest Du statt des prompt ein Modal verwenden und testen, ob das Problem damit auch auftritt.

  • Zum verständnis:


    der "Dienst" auf Port 8111 ist die Middelware "LogoControl" von "Frickelzeugs.de" welche im Grunde nichts anderes macht als einen Webservice zu Hosten und auf die Speicherblöcke einer Siemens Logo SPS auszulesen und zu schreiben.

    Die SPS 192.168.2.11 ist eine Siemens Logo 8



    Also

    Dienst liest werte aus SPS
    Dienst schreibt werte in SPS
    Dienst hostet Webservice zum anzeigen der gelesen Werte und zum verändern schreibbarer Werte
    Joomla zeigt Webservice in iframe.

    Mit "Modal" kann ich nichts anfangen.

    was müsste hier verändert werden?

    Code
    1. // set attribute
    2. function setDeviceAttribute(deviceId, attributeId, attributeName, currentValue) {
    3. var newValue = prompt("Attributwert \"" + attributeName + "\" ändern:", currentValue);
    4. if (newValue != null) {
    5. jQuery.get('rest/devices/' + deviceId + '/attributes/' + attributeId + '/valueText?set=' + newValue);
    6. }
    7. }


    Danke für deine Mühen.

  • Bevor wir mit einem Modal anfangen, sollten wir auf das prompt verzichten und statt dessen ein Input-Felder verwenden:

    Erst Mal um zu testen, ob es damit funktioniert. console.log ist für mich zum Testen, jQuery.get konnte ich verständlicher Weise nicht testen.

  • Leider startet dann der Dienst nicht mehr.


    Sie könnten sich die Windows Version einfach hier herrunterladen.

    Dann nur die LogoControl Exe ausführen. Zuvor in der Config XML die IP Adresse auf "0.0.0.0" abändern, dann startet der dienst auch ohne SPS im Netzwerk.

    Wir würden Sie für eine Lösung selbstverständlich auch entlohnen.


    http://www.frickelzeugs.de/logocontrol/installation-windows/


    Im Download ist schon eine Beispiel config. Die weißen Felder sind Schalter (Method) die schwarzen Statusanzeigen (attribut)


    Vieleicht bekommen Sie es ja zeitnah hin?

  • Dienst wird dann im Browser (am besten Chrom) geöffnet unter localhost:8088


    Und dann eben den Versuch mit einen IFRAME starten

  • Danke habe es jetzt gelöst. Lediglich der Js eintrag fehlte auf der Elternseite. Hatte zwar diesen in die index.php von Joomla gepackt, aber nicht realisiert, das dieser in die index.php des Templates gehört.


    Vielen Dank für Ihre Hilfe