Javascriptfehler iOS 10.3 Beta / Safari Technology Preview

Begonnen von Weisswurstverkäufer, 31 Januar 2017, 11:49:09

Vorheriges Thema - Nächstes Thema

Weisswurstverkäufer

Hallo,

seitdem ich die iOS 10.3 Beta und die aktuelle Safari Technology Preview Version installier habe, zeigt mir FHEM auf jeder Seite mit einem SVG Plot einen Fehler an. Ich bin dem Fehler ein bisschen nachgegangen und es scheint mit der Benutzung von getSVGDocument zu tun zu haben

~/tmp/fhem/www:fhem:13293] grep -irn "getSVGDocument" *
pgm2/svg.js:353:    var ed = e.getSVGDocument();
pgm2/svg.js:383:    if(typeof embArr[i].getSVGDocument != "function")
pgm2/svg.js:385:    var svg = embArr[i].getSVGDocument();
pgm2/fhemweb.js:845:      if($(this.getSVGDocument()).length == 0 && !retry &&
pgm2/fhemweb.js:851:      if($(this.getSVGDocument()).find("svg[flog]").attr("flog"))


Ich habe ein bisschen danach gesucht und es scheint als solle man getSVGDocument nicht mehr nutzen, sondern contentDocument:

ZitatYou may find documentation referring to an SVGDocument interface. Prior to SVG 2, SVG documents were represented using that interface. However, SVG documents are now represented using the XMLDocument interface instead.

Quelle: https://developer.mozilla.org/en-US/docs/Web/SVG/Scripting

Ich habe einfach mal testweise die ganzen getSVGDocument-Aufrufe durch contentDocument ersetzt und es gibt keine offensichtlichen Fehler mehr. Allerdings bin ich mir auch nicht 100 % sicher, ob jetzt irgendwas das ich vielleicht nicht sehe / benutze nicht mehr funktioniert - vor allem nicht in anderen Browsern.

Vielleicht möchten ja andere Leute auch mal testen?

Gruß

Spezialtrick

FHEM - Debmatic - Zigbee2MQTT - Homekit

betateilchen

Zitat von: Weisswurstverkäufer am 31 Januar 2017, 11:49:09
und es scheint mit der Benutzung von getSVGDocument zu tun zu haben

attr <webName> plotEmbed 0

... und die Fehlermeldungen sind auch weg.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Weisswurstverkäufer

Zitat von: betateilchen am 31 Januar 2017, 12:15:16
attr <webName> plotEmbed 0

... und die Fehlermeldungen sind auch weg.

Gerade auch im anderen Thread gelesen, danke.

Evtl. sollte das Standard werden - scheint ja überall zu funktionieren.

Gruß

rudolfkoenig

Der Haken mit plotEmbed 0 ist, dass die SVGs dann nicht mehr parallel berechnet werden, plotfork wird ignoriert.

Kennt jemand eine Seite, die beschreibt, welche Browser Versionen contentDocument unterstuetzen?
Ich habe nach etwas Suche nur den Verdacht, dass IE9+ und FF2+ es unterstuetzt.
Weiterhin muss die Pruefung in svgj.js:383 anders erfolgen, weiss aber noch nicht wie.

Weisswurstverkäufer

#5
Als workaround könnte man es doch z. B. machen wie hier:


function getSubDocument(embedding_element)
{
if (embedding_element.contentDocument)
{
return embedding_element.contentDocument;
}
else
{
var subdoc = null;
try {
subdoc = embedding_element.getSVGDocument();
} catch(e) {}
return subdoc;
}
}


(Quelle: http://xn--dahlstrm-t4a.net/svg/html/get-embedded-svg-document-script.html)

Und wenn beides nicht geht hat man doch auch die Antwort für svg.js:383

rudolfkoenig

Na das sowas funktioniert, ist mir klar, ich wollte nur wissen, ob ich darauf komplett verzichten kann.
Und fuer 383 ist es kein Workaround: damit wird ein <embed>, was nicht SVG ist, vermieden.

rudolfkoenig

Ich habe fuer fhemweb.js/svg.js eine Funktione gebaut, und ich meine auch fuer Zeile 383 eine Alternative.

Was mich aber sehr irritiert: contentDocument gibt es weder in Chrome/Firefox/IE11 noch in 10.2.1 iOS Safari, d.h. ich habe es nirgendwo testen koennen. Kannst du bitte pruefen, ob ich nicht was verwechselt habe?

Weisswurstverkäufer

Ich glaube Du hast recht - es scheint nicht zu helfen. Irgendwie ist das Problem doch komischer als gedacht: contentDocument ist immer 'undefined' (vermutlich gab es in meinem 1. Versuch deshalb einen JavaScript Fehler den ich nicht gesehen habe, aber nichts was durch einen Dialog angezeigt wurde), weshalb wieder der getSVGDocument()-Fallback verwendet wird.

if(typeof emb.getSVGDocument == "function")

ist aber true, deshalb wird auch emb.getSVGDocument() returned. Der Fehler tritt dann erst auf, wenn er wieder aus der FW_getSVG-Funktion raus ist.

Wenn ich heute abend Zeit habe werde ich das nochmal genauer debuggen. Getestet übrigens mit 'Safari Technologie Preview'.

Markus M.

Selbes Problem hier.
Sagt Bescheid wenn es was zum Testen gibt.
FHEM dev + HomeBridge + Lenovo Flex15 + HM-CFG-USB + RFXtrx433 + Fritz!Box 7590/7580/546E

HM Aktor/Sensor/Winmatic/Keymatic/Thermostat, HUE, Netatmo Weather/Security/Heating, Xiaomi AirPurifier/Vacuum, Withings Aura/BPM/Cardio/Go/Pulse/Thermo, VSX828, Harmony, Siro ERB15LE
https://paypal.me/mm0

Weisswurstverkäufer

Ich habe noch ein bisschen getestet bzw. recherchiert. contentDocument funktioniert scheinbar nicht bei embed, sondern nur bei iframe und object. Bringt uns also leider nicht weiter. In meinem 1. Test war es offenbar dann einfach undefined, die Plots wurden aber normal angezeigt, deshalb ist mir nichts negativ aufgefallen.

(typeof emb.getSVGDocument == "function") ist allerdings tatsächlich true, beim Aufruf der Funktion wird dann aber der Fehler geworfen. Habe jetzt auch keine weitere Möglichkeit gefunden an das document zu kommen. Möglicherweise ist es ja doch ein Bug in WebKit - tritt ja momentan nur in den Betas auf.

Benni

#11
Hallo Rudi,

ich habe eben mal wieder ein Update gemacht und erhalte seither auf allen Seiten, die ein Plot enthalten, folgenden JavaScript-Fehler (s. Screenshot)

Scheint mir zu diesem Thread zu gehören.

Browser bei mir ist Chrome 56.0.2924.87 (64-bit) auf macOS Sierra 10.12.1
plotfork steht bei mir derzeit auf 0 (warum weiß ich gerade nicht mehr) und plotEmbed ist gar nicht gesetzt.

In Safari (Version 10.0.1 (12602.2.14.0.7)) erhalte ich den Fehler nicht.


Gruß Benni.

Update: Hat sich erledigt! Nach leeren des Browser-Cache (durch Neustart des Browsers) war das Problem behoben!

Weisswurstverkäufer

Lösch mal deinen Browsercache. Sieht aus als würde er die neue Version der Datei nicht laden.

Benni

Zitat von: Weisswurstverkäufer am 04 Februar 2017, 15:11:08
Lösch mal deinen Browsercache. Sieht aus als würde er die neue Version der Datei nicht laden.

War schon selbst drauf gekommen  ;D

Trotzdem Danke!

Qwz80

Gibt es schon etwas neues? Kann das Problem gelöst werden, oder muss das Attribut confirmJSErro 0 auch in Zukunft gesetzt bleiben. Im März wird ja die Final von iOS 10.3 releast.