• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[FRAGE] Fehler: Uncaught TypeError: undefined is not a function

SykesXable

New member
Moin,
ich habe 2 Scripts die per p2p (peerJS) miteinander kommunizieren.

wenn das 1 script folgende funktion ausführt bekomme ich am Empfängerscript folgende Fehlermeldung: Uncaught TypeError: undefined is not a function

Senderscript:
Code:
 setInterval("ScrollPos()", 1000);
[.....]
function ScrollPos(){           
if(ScrollPosOffset != window.pageYOffset) {
ScrollPosOffset = window.pageYOffset;
conn.send(ScrollPosOffset);
}}

Empfängerscript:
Code:
peer.on('connection', function(conn) {
  conn.on('data', function(data){
if(data.charAt(0) == '^') {        <--- Hier wird der Fehler angezeigt
console.log(data);
}
else {
console.log('Remote Scrollpos: ' + data);
    window.scrollTo(0, data);
}  
  });
});

Wenn ich die Daten im Klartext sprich conn.send("123") sende funktioniert das ganze allerdings.
 
Zuletzt bearbeitet:
Moin,
ich habe 2 Scripts die per p2p (peerJS) miteinander kommunizieren.
Juhuuu....
Und wie kommunizieren diese?
Über was kommunizieren diese?
Mittels Webbrowser wie dem Internet Explorer?
Wenn ja, dann ist dir schon klar, dass der Internet Explorer bis einschließlich Version 8 window.pageYOffset nicht kennt!?

PS: Für längeren Code benutze bitte die
Code:
-Tags anstatt der [INLINE]-Tags.
 
Dann wird das Empfängerscript wohl keine Daten bekommen und daher ist die Variable data ohne Definition (Inhalt), oder wie der Browser dir sagt undefined, auf die die .charAt()-Methode nicht angewendet werden kann.

Aber noch viel wichtiger ist, dass du mal mehr Informationen bereitstellst. Den Browser kennen wir ja jetz schon einmal, aber was ist mit dem Rest?
So Sachen wie ich benutze PEERJS und so weiter...

PS: Ein Testlink, wo man sich das Problem anschauen kann ist auch immer hilfreich...
 
Okay: Das Emperfängerscript bekommt Daten sonst würde es garnicht versuchen 'data' zu überprüfen das dies mit einem event verknüpft ist.
Außerdem funktioniert die Überprüfung ja wenn ich die Daten manuell sende d.h. es muss irgendwas am Senderscript nicht stimmen - nur was?

Einen Testlink gibt es nicht da es sich um GM-Userscripte handelt.
Und das ich peerJS verwende hatte ich ja oben bereits erwähnt.
 
Sicher das da etwas übertragen wird, die Frage ist nur: Was wird übertragen?

Ich würde ja mal im Sendescript anfangen zu suchen. Las dir doch mal vor conn.send(ScrollPosOffset); ausgeben welchen Wert du hast console.log(ScrollPosOffset);
 
ehe das
Warum willst du denn überhaupt die Position auf dem Bildschirm haben? ev.pageX und ev.clientX sind normalerweise völlig ausreichend.
nicht geklärt ist, macht es wohl kaum sinn das nächste anzugehen.
was du für eine funktionierende lösung hälst, wird mit hoher wahrscheinlichkeit murks sein und besser zu lösen
 
window.pageYOffset ist eine Zahl und die haben keine Methode .charAt()...

Wenn du nur Strings senden willst, musst du die Zahl vorher mit ScrollPosOffset.toString(10) in einen String umwandeln.
 
window.pageYOffset ist eine Zahl und die haben keine Methode .charAt()...

Wenn du nur Strings senden willst, musst du die Zahl vorher mit ScrollPosOffset.toString(10) in einen String umwandeln.

Danke! Genau das wars :)

@hesst: Das Problem war ich muss die Maus klicken lassen. Die Mauskoords werden vom Sender zum Empfängerscript geschickt. Da JS allerdings nicht in der Lage ist Mausklicks auszuführen leite ich diese Mausdaten per WebSocket an einen lokalen WebSocketServer weiter der dies kann - der allerdings kann nichts mit den Mausdaten die JS nichts anfangen da diese relativ zum Dokument sind d.h. Y kann ganz schnell (bei langen Seiten) mal bei 2000px liegen obwohl die Maus in
realität bei bsp 500px (mitte des Bildschirms) ist. Dafür brauchte ich die 'realen' Mausdaten und nicht die vom Dokument .
Dies habe ich erreicht in dem ich die Mausposition vom Dokument nehme und davon dann das aktuelle pageYOffset abziehe. Am ende rechne ich nochmal 85 drauf - da bei chrome der Teil vor dem Dokumentstart 85px Breit ist.
Das dies dann nur bei Chrome und auch nur wenn der Vollbildmodus aktiviert ist is nicht von belang das dieses Script nur für mich ist. Und das das berechen eventl. 'unsaubere' Programmierung ist mir eigentlich relativ egal das es so funktioniert wie ich es mir vorstelle.
Wenn du allerdings eine bessere Idee hast kannst du mir diese gerne mitteilen.

MfG
 
Und wieder was gelernt.

Du könntest aber auch die Koordinaten im Browser nehmen, dir dann per document.elementFromPoint() das Element raussuchen und dann mit der .click() Methode den Klick simulieren. Dann brauchst du den Zwischenschritt über den "WebSocketServer" nicht.
 
Hast du das eigentlich beachtet? Jetzt war schon wieder die Rede von "mit pageYOffset verrechnen"...
ev.pageX mit window.pageYOffset zu verrechnen ergibt nicht wirklich einen sinnvollen Wert...

der allerdings kann nichts mit den Mausdaten die JS nichts anfangen da diese relativ zum Dokument sind d.h. Y kann ganz schnell (bei langen Seiten) mal bei 2000px liegen obwohl die Maus in
realität bei bsp 500px (mitte des Bildschirms) ist.
Nochmal: wie kommst du darauf??
 
Zurück
Oben