prompt in iframe

  • 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

  • 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

  • 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?

  • 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.

  • 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?

  • 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