Toon posts:

[Greasemonkey]Links vervangen?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Eerst maar even: ik ben een ontzettende javascript newb dus mocht ik foute aannames doen dan bij voorbaat excuses.

Doel: M****** links in www.eventid.net vervangen door de echte links. Handig! :)

Dit is wat ik in elkaar heb gefrutseld:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// ==UserScript==
// @name          EventID.Net
// @include       http://www.eventid.net/*
// ==/UserScript==

var allmskblinks, thismskblink, [s][/s]replacement;
allmskblinks = document.evaluate(
    '//a[@href="/subscribersonly.asp?feature=qarticle"]',
    document,
    null,
    XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
    null);
for (var i = 0; i < allmskblinks.snapshotLength; i++) {
    thismskblink = allmskblinks.snapshotItem(i);
    replacement = ('http://www.xs4all.nl');
        thismskblink.parentNode.replaceChild(replacement, thismskblink);
}

Nu vind ik alle links waar naar een MS KB artikel wordt gelinkt. (Middels alert getest) Volgens mij replace ik zo de link door "replacement" maar dat werkt dus niet. Wat doe ik verkeerd? Diverse voorbeeld scripts erbij gepakt en die zien er niet erg anders uit.

Als tweede wil ik extra informatie erbij pakken namelijk de naam van de link, hier staat het M****** nummer in wat ik kan gebruiken om de link te herschrijven. Dit staat niet in "thismskblink", maar staat het dan wel in de "allmskblinks" array of strip ik dat eruit door de snapshotlength toe te passen?

  • user109731
  • Registratie: Maart 2004
  • Niet online
Verwijderd schreef op donderdag 16 november 2006 @ 14:53:
Nu vind ik alle links waar naar een MS KB artikel wordt gelinkt. (Middels alert getest) Volgens mij replace ik zo de link door "replacement" maar dat werkt dus niet. Wat doe ik verkeerd? Diverse voorbeeld scripts erbij gepakt en die zien er niet erg anders uit.
Ik zou eerder zoiets verwachten:
JavaScript:
1
thismskblink.href = 'http://www.xs4all.nl';

:)
Als tweede wil ik extra informatie erbij pakken namelijk de naam van de link, hier staat het M****** nummer in wat ik kan gebruiken om de link te herschrijven. Dit staat niet in "thismskblink", maar staat het dan wel in de "allmskblinks" array of strip ik dat eruit door de snapshotlength toe te passen?
Je vraagt nu in een loop alle A-elementen op, en de url krijg je met thismskblink.href. Die kun je met een regular expression of met simpele string functies ofzo doorzoeken. Maar hoe kom je aan het eventid, haal je die elders uit de pagina? :)

Verwijderd

Topicstarter
@Grote prutser: Dat werkt! Zo'n grote prutser ben je dus toch niet! ;-) Waarom ze dan op de diverse Greasmonkey blogs en pagina's er zo'n punt van maken? :? :? :?

Hier een voorbeeld van een link die ik moet converteren:
code:
1
<a href="/subscribersonly.asp?feature=qarticle">M307613</a>


Tis in elk geval niet (thismskblink.name) en ook niet source. Hoe de fuk heet dat dan? :D

[ Voor 15% gewijzigd door Verwijderd op 16-11-2006 15:39 ]


  • user109731
  • Registratie: Maart 2004
  • Niet online
Dat zal dan zoiets worden als (ervanuitgaande dat die link veranderd word in http://domain/page?id=M307613):
JavaScript:
1
thismskblink.href = 'http://domain/page?id='+thismskblink.firstChild.nodeValue;

edit:
Tis in elk geval niet (thismskblink.name) en ook niet source. Hoe de fuk heet dat dan? :D
Je hebt een A-element. Die heeft een textnode als kind (child). De textnode is de eerste, dus die krijgen we met firstChild. Dan wil je nog de waarde van die textnode hebben, en dat is nodeValue :). Wat grover geschut is link.innerHTML. a.name zou het zijn als er <a name="..."> had gestaan :)

[ Voor 50% gewijzigd door user109731 op 16-11-2006 15:44 ]


Verwijderd

Topicstarter
Yup! Dat is 'm Grote Prutser. Hier gaan we veel mensen blij mee maken:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// ==UserScript==
// @name          EventID.Net
// @include       http://www.eventid.net/*
// ==/UserScript==

var allmskblinks, thismskblink;
allmskblinks = document.evaluate(
    '//a[@href="/subscribersonly.asp?feature=qarticle"]',
    document,
    null,
    XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
    null);
for (var i = 0; i < allmskblinks.snapshotLength; i++) {
    thismskblink = allmskblinks.snapshotItem(i);
    thismskblink.href = 'http://support.microsoft.com/kb/'+thismskblink.firstChild.nodeValue;
}


Ik ga me hier es verder in verdiepen, vind het wel interessant.