Autor Thema: "Uncaught TypeError: Cannot convert undefined or null to object" aufspüren  (Gelesen 301 mal)

Offline Dr. Boris Neubert

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 4491
Hallo,

seit ich FHEM mit RSS hier auf einem Raspberry Pi 2B mit original Raspberry-Display laufen lasse, plagt mich ein Problem, das ich nun soweit eingrenzen konnte:

Auf dem Raspberry-Desktop läuft der Chromium-Browser im Vollbild und zeigt über RSS mit HTML durchlaufend Bilder mit überblendeten Informationen zum Wetter und zu Terminen. Regelmäßig etwa einmal pro Tag bleibt der Durchlauf hängen. Im Chromium-Browser-Log steht dann:

[820:820:0810/124554.251890:INFO:CONSOLE(10)] "Uncaught TypeError: Cannot convert undefined or null to object", source: http://localhost:8083/fhem/rss/pipad.html (10)

pipad.html enthält

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>pipad</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0"/>
<script type="text/javascript" src="/fhem/pgm2/RSS.js"></script>
</head>
<body data-confirmDelete='1' data-confirmJSError='1' data-addHtmlTitle='1' data-styleData='' data-availableJs='iconLabel,iconButtons,colorpicker,iconSwitch,fbcalllist,weekprofile,knob,readingsGroup,sortable,uzsu,iconRadio,readingsHistory' data-webName='WEB ' topmargin="0" leftmargin="0" margin="0" padding="0"  style="overflow:hidden">
<div id="rss_pipad" style="z-index:1;" >
<img id="img0" src="http://pipad.rs65.neubert-volmar.de:8083/fhem/rss/pipad.jpg" usemap="#map" onload="setTimeout(function(){reloadImage('img0')},15*1000);" onerror="setTimeout(function(){reloadImage('img0')},15*1000);"/>
<map name="map" id="map">
<area shape="rect" coords="5,5,45,45" href="http://localhost:8083/fhem" target="_top"/>
</map>
</div>

</body>
</html>

wobei Zeile 10 diese hier ist (alle 15 Sekunden wird das :

<img id="img0" src="http://pipad.rs65.neubert-volmar.de:8083/fhem/rss/pipad.jpg" usemap="#map" onload="setTimeout(function(){reloadImage('img0')},15*1000);" onerror="setTimeout(function(){reloadImage('img0')},15*1000);"/>


Das einzige Javascript, aus dem das Problem kommen kann, ist reloadImage() in fhem/www/pgm2/RSS.js. Nun habe ich in RSS.js schon ein try-catch eingebaut:

// reload image with id
function reloadImage(id) {
  try {
    // we use a dummy query to trick the browser into reloading the image
    var d = new Date();
    var q = '?t=' + d.getTime();
    var image = document.getElementById(id);
    var url = image.getAttribute('src');
    image.setAttribute('src', url.replace(/\?.*/,'') + q );
  } catch(err) {
    console.log("FHEM RSS Error: "+err);
  }
}

Der Fehler kommt aber dennoch und der Output von console.log() steht auch nicht im Chromium-Browser-Log.

Wer schafft es, mir auf die Sprünge zu helfen, was die Quelle der Exception sein kann?

Vielen Dank für Eure Gedanken.
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 20774
Ich tippe auf einem Chromim Bug auf ARM Hardware.
Ich wuerde reloadImage mit einem weiteren Attribut mitteilen, von wo es aufgerufen wurde (onload/onerror), und auch im Normalfall mehrere console.log Zeilen einbauen.
15-20 Tausend Zeilen in der Console sollte ein RPI noch verkraften.

Offline Dr. Boris Neubert

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 4491
Danke, Rudi. Schreibe jetzt vor und nach jeder Zeile in RSS.js ins Log und logge auch die Quelle mit. Mal sehen, an welcher Stelle er aussteigt.
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Offline Dr. Boris Neubert

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 4491
Hallo,

hier RSS.js mit Logging:

// reload image with id
function reloadImage(id,quelle) {
  try {
    console.log("RSS 1 Quelle: "+quelle);
    // we use a dummy query to trick the browser into reloading the image
    var d = new Date();
    console.log("RSS 2");
    var q = '?t=' + d.getTime();
    console.log("RSS 3 Date: "+q);
    var image = document.getElementById(id);
    console.log("RSS 4");
    var url = image.getAttribute('src');
    console.log("RSS 5 url: "+url);
    image.setAttribute('src', url.replace(/\?.*/,'') + q );
    console.log("RSS 6");
  } catch(err) {
    console.log("FHEM RSS Error: "+err);
  }
}


Das Debugging zeigt, dass die Seite pipad.html schon absemmelt, bevor das RSS.js gestartet wird:

[1132:1202:0811/230922.322392:VERBOSE1:network_delegate.cc(32)] NetworkDelegate::NotifyBeforeURLRequest: http://example.com:8083/fhem/rss/pipad.jpg?t=1565557762292
[1132:1202:0811/230922.322725:VERBOSE1:network_delegate.cc(32)] NetworkDelegate::NotifyBeforeURLRequest: http://example.com:8083/fhem/rss/pipad.jpg?t=1565557762292
[820:820:0811/230937.949191:INFO:CONSOLE(4)] "RSS 1 Quelle: onload", source: http://example.com:8083/fhem/pgm2/RSS.js (4)
[820:820:0811/230937.949695:INFO:CONSOLE(7)] "RSS 2", source: http://example.com:8083/fhem/pgm2/RSS.js (7)
[820:820:0811/230937.950041:INFO:CONSOLE(9)] "RSS 3 Date: ?t=1565557777947", source: http://example.com:8083/fhem/pgm2/RSS.js (9)
[820:820:0811/230937.951377:INFO:CONSOLE(11)] "RSS 4", source: http://example.com:8083/fhem/pgm2/RSS.js (11)
[820:820:0811/230937.951890:INFO:CONSOLE(13)] "RSS 5 url: http://example.com:8083/fhem/rss/pipad.jpg?t=1565557762292", source: http://example.com:8083/fhem/pgm2/RSS.js (13)
[820:820:0811/230937.952260:INFO:CONSOLE(15)] "RSS 6", source: http://example.com:8083/fhem/pgm2/RSS.js (15)
[1132:1202:0811/230937.987153:VERBOSE1:network_delegate.cc(32)] NetworkDelegate::NotifyBeforeURLRequest: http://example.com:8083/fhem/rss/pipad.jpg?t=1565557777947
[1132:1202:0811/230937.987636:VERBOSE1:network_delegate.cc(32)] NetworkDelegate::NotifyBeforeURLRequest: http://example.com:8083/fhem/rss/pipad.jpg?t=1565557777947
[820:820:0811/230953.561769:INFO:CONSOLE(4)] "RSS 1 Quelle: onload", source: http://example.com:8083/fhem/pgm2/RSS.js (4)
[820:820:0811/230953.563172:INFO:CONSOLE(7)] "RSS 2", source: http://example.com:8083/fhem/pgm2/RSS.js (7)
[820:820:0811/230953.563932:INFO:CONSOLE(9)] "RSS 3 Date: ?t=1565557793560", source: http://example.com:8083/fhem/pgm2/RSS.js (9)
[820:820:0811/230953.564341:INFO:CONSOLE(11)] "RSS 4", source: http://example.com:8083/fhem/pgm2/RSS.js (11)
[820:820:0811/230953.564604:INFO:CONSOLE(13)] "RSS 5 url: http://example.com:8083/fhem/rss/pipad.jpg?t=1565557777947", source: http://example.com:8083/fhem/pgm2/RSS.js (13)
[820:820:0811/230953.569313:INFO:CONSOLE(15)] "RSS 6", source: http://example.com:8083/fhem/pgm2/RSS.js (15)
[1132:1202:0811/230953.585007:VERBOSE1:network_delegate.cc(32)] NetworkDelegate::NotifyBeforeURLRequest: http://example.com:8083/fhem/rss/pipad.jpg?t=1565557793560
[1132:1202:0811/230953.585322:VERBOSE1:network_delegate.cc(32)] NetworkDelegate::NotifyBeforeURLRequest: http://example.com:8083/fhem/rss/pipad.jpg?t=1565557793560
[820:820:0811/231009.185439:INFO:CONSOLE(4)] "RSS 1 Quelle: onload", source: http://example.com:8083/fhem/pgm2/RSS.js (4)
[820:820:0811/231009.186791:INFO:CONSOLE(7)] "RSS 2", source: http://example.com:8083/fhem/pgm2/RSS.js (7)
[820:820:0811/231009.187308:INFO:CONSOLE(9)] "RSS 3 Date: ?t=1565557809181", source: http://example.com:8083/fhem/pgm2/RSS.js (9)
[820:820:0811/231009.187538:INFO:CONSOLE(11)] "RSS 4", source: http://example.com:8083/fhem/pgm2/RSS.js (11)
[820:820:0811/231009.187750:INFO:CONSOLE(13)] "RSS 5 url: http://example.com:8083/fhem/rss/pipad.jpg?t=1565557793560", source: http://example.com:8083/fhem/pgm2/RSS.js (13)
[820:820:0811/231009.187974:INFO:CONSOLE(15)] "RSS 6", source: http://example.com:8083/fhem/pgm2/RSS.js (15)
[1132:1202:0811/231009.201414:VERBOSE1:network_delegate.cc(32)] NetworkDelegate::NotifyBeforeURLRequest: http://example.com:8083/fhem/rss/pipad.jpg?t=1565557809181
[1132:1202:0811/231009.201742:VERBOSE1:network_delegate.cc(32)] NetworkDelegate::NotifyBeforeURLRequest: http://example.com:8083/fhem/rss/pipad.jpg?t=1565557809181
[820:820:0811/231009.751782:INFO:CONSOLE(10)] "Uncaught TypeError: Cannot convert undefined or null to object", source: http://example.com:8083/fhem/rss/pipad.html (10)


Um der Idee eines Browser-Bugs nachzugehen, habe ich jetzt diese ältere Version vom Chromium-Browser installiert, die auf einem anderen Raspberry Pi seit 120 Tagen fehlerfrei durchrennt:

http://archive.raspberrypi.org/debian/pool/main/c/chromium-browser/chromium-browser_56.0.2924.84-0ubuntu0.14.04.1.1000_armhf.deb


Dazu müssen auf jeden Fall noch chromium-browser-l10n rpi-chromium-mods scratch2 entfernt werden. Das Ganze ist übrigens auf Debian Buster.

Ich berichte, ob das Problem damit weggeht.

Viele Grüße
Boris

Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Offline Dr. Boris Neubert

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 4491
RSS läuft seit 3 Tagen durch. Also lag's am Chromium-Browser. Danke für den Tipp, Rudi!

Problem gelöst.
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!