Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[jquery] GoT: updateNotification() afvangen

Pagina: 1
Acties:

  • Sando
  • Registratie: Januari 2007
  • Niet online

Sando

Sandoichi

Topicstarter
Ik probeer die 'Er zijn '+newMessageCount+' nieuwe reacties geplaatst' van het forum te vervangen met TamperMonkey zodat gewoon de reacties meteen zichtbaar worden. Ik dacht: Dat is heeel simpel. Maar ik krijg het niet voor elkaar. :P

JavaScript:
1
2
3
4
$("#newMessages").change(function(){
    alert('Werkt dit?'); // nee dus
    showNewMessages();
});
http://userscripts.org/scripts/review/173064

showNewMessages() wordt dus helemaal niet uitgevoerd. Dat is (als ik het goed heb) de forumfunctie die wordt uitgevoerd wanneer je zelf op die gele balk klikt. Maar dat zal ook wel niet werken omdat het in een closure van newMessageNotifier() staat, maar dat is nog een stap verder. Ik zou wel toegang tot het DOM moeten hebben om te kunnen eventen wanneer er iets verandert.

Wie weet wat ik fout doe?

Voorbeeldtopic waar ik dit handig vind: Steam Summer Sale 2013

[ Voor 23% gewijzigd door Sando op 11-07-2013 20:09 ]

🇪🇺 Buy from EU (GoT)


  • Sando
  • Registratie: Januari 2007
  • Niet online

Sando

Sandoichi

Topicstarter
Oké andere aanpak.

Als ik een nieuwe newMessageNotifier injecteer, de timer stop, en het 'gehackte' object opnieuw instantiëer waardoor de timer automatisch opnieuw zou gaan moeten lopen, gebeurt er ook niks. De updates stoppen dan wel, dus de remove() lijkt iig gelukt.

Stukje script overschrijft newMessageNotifier() met showNewMessages():
JavaScript:
1
2
3
4
5
6
7
RefreshTimer().remove('newMessageNotifier')
var rsMsgWord = 'function updateNotification(errorMsg)';
var rsMsgInsert = window.newMessageNotifier.toString().indexOf(rsMsgWord) + rsMsgWord.length;
var rsMsgStr = window.newMessageNotifier.toString().slice(0,rsMsgInsert) + "{showNewMessages()}; function poop()" + window.newMessageNotifier.toString().slice(rsMsgInsert);
eval(rsMsgStr);
//newMessageNotifier(); // Voorlopig even zelf invullen, bijvoorbeeld:
newMessageNotifier('1552853', '40548274', '', 0, 0, '');

[ Voor 13% gewijzigd door Sando op 11-07-2013 21:38 ]

🇪🇺 Buy from EU (GoT)


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 22:43

crisp

Devver

Pixelated

Probleem is dat als je updateNotification verder niet uitvoert de variabele 'notification' ook niet geset is, en daarop wordt gechecked in showNewMessages. Maar waarom gebruik je geen DOM Mutation Event?

JavaScript:
1
2
3
4
5
6
7
8
document.getElementById('newMessages').addEventListener(
    'DOMSubtreeModified',
    function()
    {
        document.getElementById('newMessageNotification').onclick();
    },
    false
);


:)

wellicht moet je hier nog eea omheen hacken aangezien de onclick() uiteindelijk ook weer mutaties doet binnen #newMessages

[ Voor 20% gewijzigd door crisp op 12-07-2013 01:28 ]

Intentionally left blank


  • Sando
  • Registratie: Januari 2007
  • Niet online

Sando

Sandoichi

Topicstarter
Ooh, dat klinkt wel logisch ja. Ik ging iets te snel. In theorie was het wel mooi, oldskool injecten.

Maar jouw voorbeeld is veel mooier!
Is dat DOM 3? Die ken ik nog nie.
Zoiets probeerde ik met mijn eerste poging (jquery) maar als de 'onchange' al werkte dan had ik nog het zelfde probleem met de variabele 'notification'.

Bedankt, ik zal 'm eens uitproberen. :)
Alleen zijn er op dit tijdstip geen harde stormlooptopics meer. :P

edit:
Hij werkt! :D Maar nu gaat de gele balk niet automatisch weg totdat je er op klikt. Hoe kan dat, die hide-functionaliteit zit toch ook in de onClick?

[ Voor 35% gewijzigd door Sando op 12-07-2013 01:36 ]

🇪🇺 Buy from EU (GoT)


  • BeefHazard
  • Registratie: Augustus 2010
  • Laatst online: 11:24
Ben wel benieuwd wat de uitkomst wordt van dit topic. Heb laatst een extentie voor Twitter geïnstalleerd die precies dit doet. Meteen even testen in een druk slowchattopic zoals het GKMT of Steam-sale.

R6 | 24-70 F2.8 DG OS HSM Art | 18-35 F1.8 DC HSM Art | EF 70-200 F4L IS USM | EF 50mm f/1.8 | Zenbook 14 OLED | T14G4 OLED


  • Sando
  • Registratie: Januari 2007
  • Niet online

Sando

Sandoichi

Topicstarter
@BeefHazard hij werkt nu voor het belangrijkste deel, je kan deze userscript installeren: http://userscripts.org/scripts/review/173064

Alleen werkt die gele balk nog niet mee. :)

[ Voor 14% gewijzigd door Sando op 12-07-2013 01:42 ]

🇪🇺 Buy from EU (GoT)


  • BeefHazard
  • Registratie: Augustus 2010
  • Laatst online: 11:24
Die heb ik al even aan mijn Tweakers 7.5 userscript toegevoegd. Balk is idd vervelend, als er nu een tweede reactie komt dan wordt die niet geladen. Het werkt, maar het werkt niet.

R6 | 24-70 F2.8 DG OS HSM Art | 18-35 F1.8 DC HSM Art | EF 70-200 F4L IS USM | EF 50mm f/1.8 | Zenbook 14 OLED | T14G4 OLED


  • Sando
  • Registratie: Januari 2007
  • Niet online

Sando

Sandoichi

Topicstarter
Ja ik doe toch iets fout, kom er alleen niet achter wat precies. Mocht je er toevallig achterkomen dan wil ik je aanmoedigen de truuk even uit te leggen. :)

🇪🇺 Buy from EU (GoT)


  • BeefHazard
  • Registratie: Augustus 2010
  • Laatst online: 11:24
Sorry, maar ik en code gaat niet samen. Ik weet een beetje HTML, wat CSS en dan... Uhh, dan houdt het op.

R6 | 24-70 F2.8 DG OS HSM Art | 18-35 F1.8 DC HSM Art | EF 70-200 F4L IS USM | EF 50mm f/1.8 | Zenbook 14 OLED | T14G4 OLED


  • Sando
  • Registratie: Januari 2007
  • Niet online

Sando

Sandoichi

Topicstarter
Hey ik krijg net je bericht als 2e update. Soms werkt het wel gewoon? De posts verliezen wel de spacing onder de tekst. In een ander topic werkt het niet na de eerste update.

[ Voor 18% gewijzigd door Sando op 12-07-2013 02:00 ]

🇪🇺 Buy from EU (GoT)


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 22:43

crisp

Devver

Pixelated

Ik zie dat de DOM level 3 Mutation Events alweer deprecated zijn en dat DOM 4 een Mutation Observer specificeert. Wellicht werkt dat beter; zie o.a. http://stackoverflow.com/...query-dom-change-listener :)

Intentionally left blank


  • Sando
  • Registratie: Januari 2007
  • Niet online

Sando

Sandoichi

Topicstarter
Heb ik gister iets nieuws geleerd, is het vandaag alweer deprecated. :P
Bedankt voor het linkje. :)

🇪🇺 Buy from EU (GoT)


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 19-11 09:49

Bosmonster

*zucht*

Even heel simpel gedacht, kun je niet pollen of de balk er staat (of zichtbaar is als die er altijd is in de DOM) en zo ja er een click op triggeren? Het is iets dat je gemakkelijk af kunt met 1x per seconde.

Het kan vast ook ingewikkelder hoor, dat niet ;)

DOM-change events zijn nog erg experimenteel, zoals je hierboven al gemerkt hebt.

[ Voor 26% gewijzigd door Bosmonster op 12-07-2013 15:44 ]


  • Sando
  • Registratie: Januari 2007
  • Niet online

Sando

Sandoichi

Topicstarter
De balk is er geloof altijd, dus dan zou ik de display css moeten pollen. Dat kan ongetwijfeld, maar ik hou niet zo van pollen. Ik doe het liever met een event.

Het mooie van het gebruik maken van een library als jQuery is dat zij zich druk maken om verschillende implementaties en regels voor verschillende browsers. Dus wat ik daarom stiekem toch nog de interessantste vraag vind: Waarom werkt mijn $("#newMessages").change() niet, en hoe moet het wèl? :)

🇪🇺 Buy from EU (GoT)


  • Foxl
  • Registratie: Juli 2002
  • Niet online
Sando schreef op vrijdag 12 juli 2013 @ 18:29:
Dus wat ik daarom stiekem toch nog de interessantste vraag vind: Waarom werkt mijn $("#newMessages").change() niet
Daar is de change functie niet voor bedoeld;

http://api.jquery.com/change/
The change event is sent to an element when its value changes. This event is limited to <input> elements, <textarea> boxes and <select> elements.

I'm really easy to get along with, once you people learn to worship me...


  • Sando
  • Registratie: Januari 2007
  • Niet online

Sando

Sandoichi

Topicstarter
Oeps.. Is er iets in de jquery api wat doet wat ik dacht dat dit deed?

🇪🇺 Buy from EU (GoT)


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 19-11 09:49

Bosmonster

*zucht*

Nee, DOM change events worden niet ondersteund door jQuery, aangezien die nog niet crossbrowser zijn te implementeren. (en jQuery is een crossbrowser framework)

[ Voor 15% gewijzigd door Bosmonster op 15-07-2013 10:04 ]


  • TheNephilim
  • Registratie: September 2005
  • Laatst online: 21-11 15:31

TheNephilim

Wtfuzzle

Sando schreef op zaterdag 13 juli 2013 @ 18:16:
Oeps.. Is er iets in de jquery api wat doet wat ik dacht dat dit deed?
Bedoel je trigger('change');?
Pagina: 1