Als hobby maak ik wel eens chrome extensies om kleine dingen op websites te wijzigen. Normaal gaat dat prima, maar nu loop ik tegen een probleem aan.
Het probleem:
Op de website lolesports.com kun je tournament games bekijken van de game League of Legends. Als je doorklikt naar schedule, en dan de oudere matches bekijkt (http://euw.lolesports.com/schedule/2015-08-17) staan er meteen spoilers bij (de score, die wil je natuurlijk niet zien voor je de match gezien hebt).
Voorheen was er een 'hide spoilers' knop te vinden op de pagina, maar die is om een of andere reden verwijderd. Als ik de elements inspect van de scores, dan blijkt dat het span elements zijn met een ng-if tag en de classes ng-scope en vs-text. In de ng-if tag staat ook de voorwaarde !hideSpoilers, ik denk dus dat alleen de knop is weggehaald van de pagina, maar niet de functionaliteit. Ik kan de declaratie van die variabele echter nergens vinden.
Oplossingen:
Ik heb 2 mogelijke oplossingen kunnen vinden:
Huidig script:
De console output is dan dit:
Daar komt nog bij dat het navigeren tussen game weeks de functie niet opnieuw triggert, al zou ik daar zelf wel achter kunnen komen hoe dat moet. Ik zou liever iets hebben wat niet zo 'hacky' voelt.
Het probleem:
Op de website lolesports.com kun je tournament games bekijken van de game League of Legends. Als je doorklikt naar schedule, en dan de oudere matches bekijkt (http://euw.lolesports.com/schedule/2015-08-17) staan er meteen spoilers bij (de score, die wil je natuurlijk niet zien voor je de match gezien hebt).
Voorheen was er een 'hide spoilers' knop te vinden op de pagina, maar die is om een of andere reden verwijderd. Als ik de elements inspect van de scores, dan blijkt dat het span elements zijn met een ng-if tag en de classes ng-scope en vs-text. In de ng-if tag staat ook de voorwaarde !hideSpoilers, ik denk dus dat alleen de knop is weggehaald van de pagina, maar niet de functionaliteit. Ik kan de declaratie van die variabele echter nergens vinden.
Oplossingen:
Ik heb 2 mogelijke oplossingen kunnen vinden:
- De (AngularJS?) variabele wijzigen. Ik weet niet of de paginacontent nog wijzigt als de variabele gewijzigd wordt nadat de pagina geladen is. Het zou in dat geval moeten gebeuren voordat de DOM geladen wordt denk ik.
- De elementen verwijderen nadat de pagina geladen is. Hiermee heb ik enig succes kunnen boeken, maar om 1 of andere reden moet ik meerdere malen achter elkaar alle elementen zoeken en verwijderen, omdat er steeds maar de helft verwijderd wordt (waarom weet ik ook niet).
Huidig script:
code:
1
2
3
4
5
6
7
8
| for (var j = 0; j<5; j++) { var matches = document.getElementsByClassName('ng-scope vs-text'); console.log("Matches found: " + matches.length); console.log(matches); for (var i = 0; i<matches.length; i++) { matches[i].parentNode.removeChild(matches[i]); } } |
De console output is dan dit:
code:
1
2
3
4
5
6
7
8
9
10
| Matches found: 8 [span.vs-text.ng-scope, span.vs-text.ng-scope, span.vs-text.ng-scope, span.vs-text.ng-scope, span.vs-text.ng-scope, span.vs-text.ng-scope, span.vs-text.ng-scope, span.vs-text.ng-scope] Matches found: 4 [span.vs-text.ng-scope, span.vs-text.ng-scope, span.vs-text.ng-scope, span.vs-text.ng-scope] Matches found: 2 [span.vs-text.ng-scope, span.vs-text.ng-scope] Matches found: 1 [span.vs-text.ng-scope] Matches found: 0 [] |
Daar komt nog bij dat het navigeren tussen game weeks de functie niet opnieuw triggert, al zou ik daar zelf wel achter kunnen komen hoe dat moet. Ik zou liever iets hebben wat niet zo 'hacky' voelt.
[ Voor 178% gewijzigd door Mr Alfabet op 26-08-2015 17:01 ]