GET/POST/JSON-RPC Requests direkt aus HTMLBoxen senden

Laut Doku nicht $action, sondern $_IPS[‚action‘] wenn du auf die Werte aus dem Array zugreifen willst.
IPS_RunScriptWaitEx — IP-Symcon :: Automatisierungssoftware

Wenn es ‚früher‘ mal anders war… dann ist klar dass es durch aktivieren der 'Kompatibilitätsfunktionen wieder läuft :wink:

Michael

Danke Michael!

daran lags.

hardlog

Moin,

ich habe da noch eine Frage zu:

Ich will das eine Variable gesetzt wird wenn man auf ein Bild Klickt, aber ich bekomme das irgendwie nicht hin:

//Script
$URL = "
  <script type=\"text/javascript\">
  window.xhrGet=function xhrGet(o) {
      var HTTP = new XMLHttpRequest();
    HTTP.open('GET',o,true);
    HTTP.send(NULL);
  }
  window.xhrPost=function xhrPost(o, data) {
      var HTTP = new XMLHttpRequest();
    HTTP.open('POST',o,true);
    HTTP.send(data);
  }
  window.xhrRPC=function xhrRPC(o, name, params) {
      var HTTP = new XMLHttpRequest();
    HTTP.open('POST',o,true);
    var rpc = JSON.stringify({\"jsonrpc\":\"2.0\", \"method\":name, \"params\":params, \"id\":0});
   HTTP.setRequestHeader(\"Content-type\", \"application/json\");
   HTTP.setRequestHeader(\"Authorization\", \"Basic \" + btoa(\"xxy:yxx\"));
    HTTP.send(rpc);
  }
  </script>";
 $URL .= "<img src=\"/user/Pumpe_Aus.png\" style=\"transform: rotate(180deg);position: absolute;top:160px;left:177px\";onclick=window.xhrRPC('/api/','SetValue',[59271,'TEST123']);>";

Wie muss ich den das OnClick in ein Bild einbinden?

Moin,

so das Onclick Problem habe ich mit einem <div onclick…> Bild </div> gelöst.

Nun habe ich aber noch was:

<tr><td>RPC Request</td><td onclick=window.xhrRPC('/api/','IPS_RunScriptEX',[53100,Array(\"Titel\" => \"Temp\")]);>Jetzt SCRIPT</td></tr>

Wie muss ich das Array bei der Übergabe der Funktion IPS_RunScriptEX formatieren?

Nun habe ich auch mal eine Frage [emoji6]
Kann ich im Fehlerfall (nachdem ich die Antwort mit JS ausgewertet habe) direkt in das WF einen ‚Fehler‘ ausgeben?
Also genauso wie das Original, als lokale Notification, wie sonst auch Fehler bei Aktionen/Scripten angezeigt werden?
Würde den Fehler dem WF gerne irgendwie unterschieben, aber keine Ahnung wie ich das machen könnte.
Michael

Theoretisch kannst du ja mal schauen wo ich ein Element im DOM hinzufüge und welche CSS Klassen dran sind. Wenn du also selber eine passende Nachricht "fake"st, dann ist das möglich. Vorgesehen ist das aber nicht :smiley:

paresy

Jaaaa… Genau das ist mein (als JS-Dau) Problem.
Ich verstehe nicht wirklich was da passiert. Wie und wo ein Fehler geworfen wird, habe ich auch gefunden.
Aber da hört es dann auf…
Hätte ja sein können dass es da einen netten Einzeiler gibt :slight_smile:
Michael

Nene. Aber du kannst ja so eine Meldung mal schicken ohne Timeout. Und dann im Browser schauen, was du so angelegt wurde… Ich glaube das ist recht weit oben und irgendwas mit „notification“.

paresy

Ja das geht zu Fuß tatsächlich einfacher als gedacht.
Nachteil ist nur das es (noch) nicht schön faded :wink:
Und man selbst einen Eventhandler braucht damit es beim anklicken verschwindet.

Michael

Mal auf den ersten Post zurück:

Ja warum eigentlich nicht ?

Egal was ich mache, ich bekomme entweder:

SCRIPT438: Das Objekt unterstützt die Eigenschaft oder Methode „xhrGet“ nicht
script block (47) (3,1)

Oder, wenn ich die Funktion normal deklariere und nicht an das window-Objekt anhänge:

SCRIPT5009: „xhrGet“ ist undefiniert
script block (34) (3,1)

Jemand eine Idee wie ich den IE & Edge zur Mitarbeit überreden kann ?

Michael

Wofür nutzt Du den xhrGET, wenn Du nicht als return definierst?
Der SetValue sollte korrekt sein. Schau im Objektbaum, ob sich der Wert auf Deine Angabe ändert. Wenn Dein Objekt ein Integer ist, kannst Du auch kein String hinschicken. Dieser wird korrektweise auch nicht gespeichert.

Ansonsten versuch die JS Funktion um dieses zu erweitern:

var HTTP;
if (window.XMLHttpRequest) {
HTTP = new XMLHttpRequest();
} else {
HTTP = new ActiveXObject(„Microsoft.XMLHTTP“);
}

Es geht mir nicht um PHP oder was in IPS passiert.
Es geht um das JS im Browser.
IE und Edge finden die JS-Funktion schon nicht.
IE und Chrome fressen alles…
Michael

Dann schmeiß Deine AJAX Anfragen aus dem Skript und füge dieses hier ein:


$html = "
<script type=\"text/javascript\">
window.xhrGET = function xhrGET(o, name, params, callback) {
    var HTTP;
    if (window.XMLHttpRequest) {
        HTTP = new XMLHttpRequest();
    } else {
        HTTP = new ActiveXObject(\"Microsoft.XMLHTTP\");
    }
    var rpc = JSON.stringify({\"jsonrpc\":\"2.0\", \"method\":name, \"params\":params, \"id\":0});

    HTTP.open('POST',o,true);
    HTTP.onreadystatechange = function () {
        if (HTTP.readyState == 4 && HTTP.status == 200) {
            if (typeof callback == \"function\") {
                callback.apply(HTTP);
            }
        }
    }
    HTTP.setRequestHeader(\"Content-type\", \"application/json\");
    HTTP.setRequestHeader(\"Authorization\", \"Basic \" + btoa(\"###username###:###pw###\"));
    HTTP.send(rpc);
}
window.xhrGET('/api/','GetValue',[###OBJ-ID###], function() {
    var resp  = JSON.parse(this.responseText);

    // next things ... resp.result
});
</script>
";

###username### und ###pw### ersetzen mit Deinen Angaben.
###OBJ-ID### ebenfalls mit der gewünschten ObjectID ersetzen.

Meldung vom IE ist identisch:

Das Objekt unterstützt die Eigenschaft oder Methode „xhrGET“ nicht

Es geht mir noch immer nicht um den Inhalt der Funktion xhrGet (Ich mache einen Get auf einen Webhook und werte dessen Antwort aus).
Sondern einfach darum, dass IE und Edge keine in der HTMLBox deklarierte Funktion(en) finden können :banghead:
Oder funktioniert das bei dir ?

Edit: Ok… die Ursache liegt wohl einfach daran, dass der IE & Edge nachträglich in das DOM eingefügte JS nicht parsen.
Selbst eine simple MessageBox funktioniert nicht.
Den Code in den Events führt er aber aus… komisch

Edit2:
Wenn ich nun den Funktionsausdruck ebenfalls in das Event verlagere und dort dann die Funktion aufrufe, funktioniert es.
Das ist doch murks, ich wollte nicht so viel unnötigen Overhead im HTML haben.

Michael

PS: Erklärt auch warum im IE das hinzufügen von Eventhandlern nicht erfolgt; wenn der Code gar nicht ausgeführt wird. Das war aber eine andere Baustelle :smiley:

Habe eben mal einen anderen Test aufgebaut. Korrekt ist, dass die HTMLBOX im IE das <script> nicht in’s dom aufnimmt. Dies kann nur eines bedeuten: der ajax request der über die globale webfront js läuft wird nur eingelesen und nicht per eval geparsed. hier ist nur der ie strikt und lässt das script nicht im dom validieren. theoretisch sollte ein eval() in den part für das laden der htmlbox hinein. dann läuft es auch im ie.

Bei mir kann ich aus HTMLBoxen bestimmte Variablen nicht setzten. Als ich mir das näher angeschaut habe scheint wohl das Leerzeichen der Grund zu sein.


$HTML .= "<div id='Test1' class='zap' onclick=window.xhrRPC('/api/','SetValue',[22348 /*[Geräte\Kern Skripte\Test aus Webfront Var setzen\TestZap Dream]*/,'".$Sender."']);>".$Sender."</div>";

Wenn


$Sender = "TextohneLeerzeichen";

funktioniert das setzten der Variable, sobald aber


$Sender = "Text mit Leerzeichen";

ein Leerzeichen im String vorkommt wird die Variable nicht verändert. Was mache ich denn da falsch bzw. wie schreibe ich in eine Stringvariable ein Text mit Leerzeichen?

Ich bekomme leider folgenden Fehler.

Parse error: syntax error, unexpected ‚text‘ (T_STRING) in C:\IP-Symcon\scripts\52914.ips.php on line 3

Bei Zeile ( <script type=„text/javascript“> )