Chrome Extension [Twitch]

  • JavaScript

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von sandiro.

    Chrome Extension [Twitch]

    Hallo zsm.
    Ich bin dabei eine Extension für Chrome zu schreiben, die in erster Linie den Chat mitlesen soll.
    Das heißt: User schreibt, Konsole loggt(vorerst)

    Das funktioniert zunächst wunderbar auf dem normalen Kanal (twitch.tv/KANALNAME)
    Jedoch will ich ja nicht dort den Chat mitlesen, sondern im Dashboard (twitch.tv/KANALNAME/dashboard)
    Dort ist vom Chat her alles gleich aufgebaut, jedoch bekommt er dort keine Antwort.

    Das Script wird jedenfalls dort ausgeführt(ebenfalls mit log überprüft)

    Der wichtige Teil meiner manifest sieht so aus:

    Quellcode

    1. "permissions": [
    2. "http://www.twitch.tv/*"
    3. ],
    4. "content_scripts": [
    5. {
    6. "matches": [
    7. "http://www.twitch.tv/*"
    8. ],
    9. "js": [
    10. "js/jquery/jquery.min.js",
    11. "src/inject/inject.js"
    12. ]
    13. }
    14. ]


    Mein Script schaut momentan so aus:

    Quellcode

    1. function processTwitchLogElement($e){
    2. $c = $e.clone();
    3. $c.find(".message").find("img").replaceWith(function() { return this.alt; });
    4. var sender = $c.find(".from").text().trim();
    5. var comment = $c.find(".message").text().trim();
    6. console.log(sender + " says: " + comment);
    7. }
    8. var readyStateCheckInterval = setInterval(function() {
    9. if (document.readyState === "complete") {
    10. clearInterval(readyStateCheckInterval);
    11. console.log("WIRD GELESEN");
    12. var currTWSib = false;
    13. setInterval(function() {
    14. if(!currTWSib){
    15. currTWSib = $("ul.chat-lines li.chat-line:first");
    16. if(currTWSib.length){
    17. processTwitchLogElement(currTWSib);
    18. }else{
    19. currTWSib = false;
    20. }
    21. }else if(currTWSib.nextAll("li.chat-line").length){
    22. currTWSib = currTWSib.nextAll("li.chat-line");
    23. processTwitchLogElement(currTWSib);
    24. }
    25. }, 100);
    26. }
    27. }, 10);


    Woran könnte das liegen?
    Ich würde mich über eine Rückmeldung freuen.
    Wer Zeit und Lust hat mir eben schnell bei dem Problem vllt. über TV zu helfen, kann mich gerne in Skype kontaktieren: Re3ker

    Mit freundlichen Grüßen,
    Re3ker
    1. Wenn du schon jQuery nutzt, würde ich dir die ready-Funktion empfehlen, anstelle dies über ein Intervall zu lösen:

    Quellcode

    1. ​$(document).ready(function() { ... });


    2. wird "WIRD GELESEN" in der Konsole ausgegeben oder kommt er gar nicht soweit?
    @sandiro
    mit der ready Funktion hab ichs vorher gemacht und es hat nicht geklappt.. lag wahrscheinlich auch daran, dass ich das im dashboard gemacht hab.
    Werde ich noch abändern.(ist aber nur ein Schönheitsfehler)

    und das "wird gelesen" kommt auf jeden Fall durch(Im Dashboard ebenfalls).
    Auf der Kanalseite ist der Chat direkt auf der Seite platziert und kann daher ausgelesen werden. Auf der Dashboard-Seite hingegen ist der Chat als iframe eingebunden - was wahrscheinlich das Problem verursacht, dass der Chat über den jQuery-Selector nicht gefunden wird.

    Auf StackOverflow als Beispiel gefunden (selber aber nicht getestet):

    Quellcode

    1. $("iframe").contents().find("textarea").keydown(...)


    bzw. in deinem Fall in etwa:

    Quellcode

    1. $("#dashboard-chat").contents().find("ul.chat-list li.chat-line:first");

    sandiro schrieb:

    find("ul.chat-list li.chat-line:first");


    Vielen Dank dafür... ich hätte eigentlich selber drauf kommen können,
    da ich die Seite vorher heruntergeladen hab(Damit ich das reinpacken kann, was ich später per Js nachladen lassen will) und die iframes entfernte...

    Dein Tippfehler hat mich ebenfalls nochmal in die Irre geführt...
    Trotzdem Danke :)