"Uncaught TypeError: Cannot convert undefined or null to object" aufspüren

Begonnen von Dr. Boris Neubert, 10 August 2019, 15:12:59

Vorheriges Thema - Nächstes Thema

Dr. Boris Neubert

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!

rudolfkoenig

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.

Dr. Boris Neubert

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!

Dr. Boris Neubert

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!

Dr. Boris Neubert

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!