• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

[Projekt] Ref/Tracking-Links und was man dagegensetzen kann?

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.561
Hallo zusammen!

TL;DR
Ich halte das Thema für relativ wichtig und zeitgemäß - und es soll dazu führen das Web wieder zurück in die Hände der Anwender zu bringen, aus den Armen der Datenkraken. :uglyngb:

Um was es geht, ein Beispiel (von mehreren):
https://domain.com/?utm_source="wearetrackednet"&utm_campaign="sponsor2018"&user_id=1234

Ein Tracking Link für eine Kampagne: "sponsor2018" mit Schlüsselwort "wearetrackednet" und der "user_id" 1234.
Damit wäre es zum Beispiel sehr schnell möglich euch zu identifizieren und auch euer Surfverhalten nachzuvollziehen.

Und dagegen möchte ich mit einem völlig neuem Browser Add-on/Extension angehen.
Und ich würde euch gerne von der Pieke auf dabei haben wollen eure Meinungen und Erfahrungen zu schildern und euch mit Ideen/Wünschen einzubringen.

Ziel
- GET"-Parameter von URLs/Links auf Webseiten herausfiltern und entfernen, so das man nicht einfach nachvollzogen werden kann



Beispiele für solche derartigen URLs/Links:

+ UTM Tracking Links
https://domain.net/?utm_source="wearetrackednet"&utm_campaign="1412"



+ Google Suche, "Nächste Seite" + "Vorherige Link":
https://www.google.de/search?q=suchanfrage&ei=1234Xid1&start=10&sa=N



+ Google Suche: "See results about" / "Ergebnisse von" Link:
https://www.google.de/search?q=Test+2013&stick=H4sIAAAAAAAAAONgecToyi3w8sc9YSmbSWtOXmM04-IKzsgvd80rySypFNLgYoOy5Lj4pLj0c_UNyuPTq-JNNBikeLiQ-DwAanpke0oAAAA&sa=X&ved=2ahUKEwiY7ODZmp_cAhWGsqQKHQ7NAY4Q6RMwIHoECAoQBA



+ Google Bildersuche (krass lange Links)...
https://www.google.de/imgres?imgurl=https%3A%2F%2Fwww.advidera.com%2Fwp-content%2Fuploads%2F2016%2F01%2Fgmx-login-navigation-suchanfrage.png&imgrefurl=https%3A%2F%2Fwww.advidera.com%2Fblog%2Fsuchanfragen-der-schluessel-zu-gutem-seo%2F&docid=lkzpEqi7cCymyM&tbnid=kkkkkkkkkkkk%3A&vet=123456i&w=1511&h=507&bih=672&biw=1283&q=suchanfrage&ved=1234xaya&iact=mrc&uact=8



+ Reflinks und Shopping Links (selbst dieser Link hat Reflinks, kommt aus Google)
https://partnernet.amazon.de/help/topic/t5/a6/ref=amb_link_ZdaVG7HANcm70yIIKDQobw_7?pf_rd_p=00000000-0000-0000-916f-2a4a54e52000



Und es gibt mit Sicherheit noch viele weitere Anbieter/Typen dieser Links/URLs.
Und in der Regel werden diese Webseite auch weiterhin funktionieren, ohne das es wirklich nötig ist all diese Parameter an die Webseiten und Firmen zu übergeben. :T



Helft mit und Brainstormed und schildert eure Sichtweise und Erfahrungen!

1) Was für Tracking/Referal Links kennt ihr und wie sind diese aufgebaut, Beispiele!

2) Wie sollte man die Request-Parameter einstellen können die entfernt werden bzw. erlaubt sind (Blacklist, Whitelist, nach Muster(n)... für jede Domain/Global) ?

3) Wie sollte das Interface aufgebaut sein? Mobilansicht zuerst / Desktop? Welche Informationen müssen ersichtlich sein? Wie könnte ein mögliches Interface aufgebaut sein?

4) Etwas wichtiges vergessen? Bitte angeben.


PS: Sollte dies der falsche Platz für dieses Thema sein, bitte ich darum es zu verschieben.
 
Zuletzt bearbeitet:

KaPiTN

♪♪♫ wild at heart ♪♫♫♪

Registriert
14 Juli 2013
Beiträge
29.138
Re: [Projekt] Ref-Links und was man dagegensetzen kann?

Geht das über das hinaus, was diese Erweiterung macht?

RefControl
 

Brother John

(schein)heilig
Veteran

Registriert
1 Aug. 2013
Beiträge
235
Re: [Projekt] Ref-Links und was man dagegensetzen kann?

RefControl scheint mir ausschließlich den HTTP-Referer zu manipulieren. Bei Ref-Links geht es zumindest meistens um Query-Parameter in der URL. Das wäre aber eine interessante Frage, wie weit verbreitet Ref-Links per Referer sind. Ich denke v.a. an Preissuchmaschinen mit den üblichen »Preis gilt nur bei Einstieg über diese Seite«-Links. Wie die üblicherweise technisch umgesetzt sind, weiß ich aber nicht.

Was mir ansonsten spontan in den Sinn kam: Gibts da vielleicht schon was von Ratiopharm, a.k.a. uBlock/uMatrix? Schaut nicht so aus. Könnte aber vermutlich nicht schaden, mit denen für ein paar gute Tipps Kontakt aufzunehmen. Auf Anhieb sieht es mit so aus, dass ein Ref-Link-Filter ähnlich aufgebaut sein müsste.

Ein möglicher Showstopper: Linkmanipulation durch Extensions ist von der Sicherheit her betrachtet echt kritisch. Inwieweit erlauben die relevanten Browser sowas überhaupt?
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.561
  • Thread Starter Thread Starter
  • #4
Re: [Projekt] Ref-Links und was man dagegensetzen kann?

@KaPiTN: Wenn ich das, von dir erwähnte, 'RefControl' richtig verstehe, wird damit der Referer (von welcher Seite man aus kommt) als Information entfernt.

Im Grunde geht es aber darum, "wie" ein Link/URLs aufgerufen wird und ist ein wenig etwas anderes. Der Unterschied ist der folgende:

Rufst du im Browser die URL 1) oder 2) auf und übermittelst damit etwas - du rufst die URL ja mit den Parametern auf, die erfasst werden können.
1) https://google.de/search?q=IchBinDerQueryBeiGoogle&ved=12345idUser&start=10
oder
2) https://google.de/search?q=IchBinDerQueryBeiGoogle&start=10

Für Google wäre nur der Query (1) Interessant nach WAS du suchst und "start" auf welcher Seite du bist bzw. ab welchem Ergebnis, aber nicht die Zuordnung über den Parameter "ved", zum Beispiel.

Die Idee ist aber, nicht der Referer von wo du kommst entfernt wird, sondern das die URL überhaupt nicht mit diesem Parameter "ved", der dich einkreisen könnte, angesteuert wird.

Ein anderes Beispiel wäre die "nächste Seite" Link im ersten Beitrag, hier ist nur wichtig auf welcher Seite du dich befindest, also Ergebnis 1-10, 11-20 usw... und damit du navigieren kannst in der Suche, alles andere ist theoretisch "überflüssig" und dient, vermutlich, nur dazu dich und deine Sitzung nachzuvollziehen.

@Brother John:
Linkmanipulation geht über ein content-Skript, das würde dann einfach die URL von
https://google.de/q=Suchanfrage&ved=12345&start=10

umschreiben zu:
https://google.de/q=Suchanfrage&start=10

Und diese Manipulationen sind meines wissen nach absolut möglich, andere Add ons wie Greasemonkey zum Beispiel, erlauben es dir ja auch Javascript auf eine Seite anzuwenden und diese zu modifizieren.

Bezüglich eines Filtermechanismusses, "Update" Listen wären in der Tat gut, da müsste man nich alles von Hand einstellen müssen und könnte einfach "Updaten" - auch nicht unbedingt "technische" Leute. Auf der anderen Seite sollte aber dann ein manuelles "überschreiben" der Regeln, aus einer Liste, möglich sein. Und ich würde auch sagen, muss man selbst auch eigene Regeln vergeben können für eine Domain(?) oder selektiv deaktivieren können.
 
Zuletzt bearbeitet:

KaPiTN

♪♪♫ wild at heart ♪♫♫♪

Registriert
14 Juli 2013
Beiträge
29.138
Re: [Projekt] Ref-Links und was man dagegensetzen kann?

Ach so. Also geht es um Tracking URLs.

Da gibt es auch bereits Erweiterungen. Ich weiß nicht, ob man die noch toppen kann und muß. (?)


Beispiele:

Link Cleaner

Clean Links
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.561
  • Thread Starter Thread Starter
  • #6
Re: [Projekt] Ref-Links und was man dagegensetzen kann?

@KaPiTN:

Ich passe mal den Threadtitel an bzw. ergänze das.

Ich gehe mal die Add-ons kurz durch, mit etwas Meinung und auch mit einer Frage zu "Clean Links".

Link Cleaner liest sich sehr speziell:

- removes utm_* parameters
- on item pages of aliexpress and amazon, removes tracking parameters
- skip redirect pages of facebook, steam and reddit

UTM parameter, okay - und Anti-Tracking auf Ali, Amazon(?) - das klingt etwas wenig. Und es lässt sich scheinbar nicht konfigurieren.

Clean Links verstehe ich nicht ganz um ehrlich zu sein, sieht aber schon sehr genau danach aus.
Hier sehe ich nur das Problem das man RegEx schreiben und verstehen muß und selbst mit dem Beispiel, wie muß das Add on bzw. der Regex konfiguriert werden, um den GET hier zu bereinigen damit aus der URL bzw. dem Request:

https://www.google.de/search?q=test&biw=1482&bih=770&ei=HYNLW7LtB00000000000&start=30&sa=N

das hier wird?
https://www.google.de/search?q=test&start=30

Und normalerweise verstehe ich RegEx ja schon einigermaßen, aber ich wüsste nicht, wie das eingestellt werden muß. Daher, wie kann man das damit umsetzen?
Ich frage nicht weil ich faul bin, ich bin nur überfordert den RegEx String so anzupassen, dass man genau die Parameter abschneidet/herausgefiltert werden aus der URL.
Und dann die Frage auch im Anschluss, ist das so für dich in dieser Form nutzbar?
 
Zuletzt bearbeitet:

KaPiTN

♪♪♫ wild at heart ♪♫♫♪

Registriert
14 Juli 2013
Beiträge
29.138
Re: [Projekt] Ref-Links und was man dagegensetzen kann?

@theSplit:

Da ist doch bereits ein RegEx-string vorgegeben



[src=text](?:ref|aff)\\w*|utm_\\w+|(?:merchant|programme|media)ID[/src]
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.561
  • Thread Starter Thread Starter
  • #8
Re: [Projekt] Ref-Links und was man dagegensetzen kann?

@KaPiTN: Das habe ich gesehen ;) Aber wie wäre die korrekte Einstellung dafür?

Aber auch ein Punkt, ist das wirklich praktikabel in der Form?
Technisch vielleicht, weil man den UserRegEx über den Request bzw. URL "matched/replaced" aber wenn man diverse Seiten hätte die zig Parameter nehmen. Dann kann ich den Wert nicht mehr managen, vermute ich - zumindest nicht ohne anderes Interface.
 

KcDaRookie

Temporär Suspendiert :D

Registriert
14 Juli 2013
Beiträge
401
Re: [Projekt] Ref-Links und was man dagegensetzen kann?

@theSplit: Regex wäre z. Bsp. folgender: (http:\/\/www\.google\.de\/search).*?(q=[^&]*).*?(&start=\d*).*?
Ersetzen dann mit: $1?$2$3

Unbenannt.png
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.561
  • Thread Starter Thread Starter
  • #10
Re: [Projekt] Ref-Links und was man dagegensetzen kann?

@KcDaRookie: Danke dir, das mit den Catching Groups ist mir auch ein Begriff. - aber ich wollte halt wissen "wie" geht das bei dem vorgeschlagenen 'Clean Links' Add-on?

Ich will doch nur 2 Parameter aus der URL weg haben... ;)


Edit: So sieht das in den Settings der Extension aus:

 

KcDaRookie

Temporär Suspendiert :D

Registriert
14 Juli 2013
Beiträge
401
Re: [Projekt] Ref-Links und was man dagegensetzen kann?

Genau so.
Du matchst mit RegEx nicht das, was du nicht willst, das kennst du ja garnicht.
Sondern matchst, was du behalten willst und baust den String dann selbst auf.

Wie willst du denn andersrum matchen, wenn du garnicht weißt wonach du suchst? :coffee:

Edit: Also ob Clean Links so funktioniert kA, hab das Add-On nicht. Aber andersrum ist halt ziemlich unsinnig zu arbeiten.

Edit2: Sehe deinen Nachtrag, da wüsste ich das auch nicht. :unknown:
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.561
  • Thread Starter Thread Starter
  • #12
Re: [Projekt] Ref-Links und was man dagegensetzen kann?

@KcDaRookie: Hier ist ein Screenshot der Settings (RegEx Pattern) von Clean Links. Schau dir das mal an ob du damit klar kommen würdest.

\w = Word Character, okay...
() die Gruppe

aber:
[src=text]
[?&]ei[^&]*
[/src]

geht nicht? So würde ich das aber umsetzen was, ich vermute, was verlangt wird siehe (siehe Screenshot):

https://www.picflash.org/picture.php?key=NMRVQM&action=show
 
Zuletzt bearbeitet:

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.561
  • Thread Starter Thread Starter
  • #13
Ich bin etwas unzufrieden mit den anderen Lösungen, daher habe mal etwas Code geschrieben...

Das ganze kann man so in GreaseMonkey verwenden:
[src=javascript]// ==UserScript==
// @name GETRequestCleaner-test
// @author theSplit <touch@dwrox.net> (https://github.com/jrie)
// @description Cleans links GET Parameters based on rules and optional extra patterns using regular expressions
// @license GPL-3.0+; http://www.gnu.org/licenses/gpl-3.0.txt
// @version 0.1
// @grant none
// ==/UserScript==

// Rules
// Global rules and patterns, appliying to every page those patterns are joined
let globalRules = {
'UTM': ['utm_']
}

// On which domain names: http://$DomainTrigger - to trigger a rule by set name and domain.
// Can be 'www12.google.com' or 'google.com' or just 'google', last to target every domain where "google" occurs
// NOTE: $domainRules has to be the exact name for rules to apply!!
let domainTrigger = ['google']

// Domain specific rules triggered by $DomainTrigger - those are joined together = "(ei|biw|bih|...)"
let domainRules = {
'google': ['ei', 'biw', 'bih', 'vet', 'ved', 'source', 'iact', 'ie', 'oe', 'stick', 'gl']
// Example: 'www12.google.com': ['ei', 'biw', 'bih', 'vet', 'ved', 'source', 'iact', 'ie', 'oe', 'stick', 'gl']
}

// This are additions (regEx) to the joined $globalRules and $domainRules and appended to the regular expression.
// NOTE: This is unrequired, but can be to more precise - you can simplify or remove google perhaps as we check for '?|&'
let ruleExtras = {
'UTM': '.*=',
'google': '='
}

// Whats the name of the rule by $Trigger
// NOTE: Also this can be empty, then just we say that $trigger not $ruleName changed links!
let ruleNames = {
'UTM' : 'UTM link pattern',
'google': 'Google pages'
}

// Is a console present? No need to change...
let hasConsole = window.console !== undefined

// --------------------------------------------------------------------------------------------------------------------------------

function applyRulesToLinks (evt) {
let hrefLinks = document.querySelectorAll('a')
let location = document.location.toString()

let targetLinks = []
for (let link of hrefLinks) {
if (link.href.indexOf('?') !== -1) targetLinks.push(link)
}

let modifiedByRules = {}

for (let link of targetLinks) {

for (let trigger of Object.keys(globalRules)) {
let ruleSetString = '(' + globalRules[trigger].join('|') + ')'

if (ruleExtras[trigger] !== undefined) ruleSetString += ruleExtras[trigger]

let regex = new RegExp('[?&]' + ruleSetString + '[^&]*', 'gi')

let oldHref = link.href
link.href = link.href.replace(regex, '')

if (link.href.indexOf('?') === -1) link.href = link.href.replace('&', '?')

if (oldHref !== link.href) {
if (modifiedByRules[trigger] === undefined) modifiedByRules[trigger] = 1
else ++modifiedByRules[trigger]

console.log('before')
console.log(oldHref)
console.log('after general')
console.log(link.href)
}
}

}

for (let trigger of domainTrigger) {
let domainRegEx = new RegExp('.*(' + trigger + ')[^\/]', 'i')
let domainLocationMatch = location.match(domainRegEx)
/*
console.log('Match:')
console.log(domainRegEx.toString())
console.log(domainLocationMatch)
*/

if (domainLocationMatch !== null) {
if (domainRules[trigger] !== undefined) {
let ruleSetString = '(' + domainRules[trigger].join('|') + ')'

if (ruleExtras[trigger] !== undefined) ruleSetString += ruleExtras[trigger]

let regex = new RegExp('[?&]' + ruleSetString + '[^&]*', 'gi')

for (let link of targetLinks) {
let oldHref = link.href
link.href = link.href.replace(regex, '')

if (link.href.indexOf('?') === -1) link.href = link.href.replace('&', '?')

if (oldHref !== link.href) {
if (modifiedByRules[trigger] === undefined) modifiedByRules[trigger] = 1
else ++modifiedByRules[trigger]
}
}
}
}
}

if (hasConsole) {
for (let appliedRule of Object.keys(modifiedByRules)) {
let changedLinks = modifiedByRules[appliedRule]
if (ruleNames[appliedRule] !== undefined) console.log('[' + new Date().toLocaleString() + '] Rule applied: "' + ruleNames[appliedRule] + '" and ' + changedLinks + ' ' + (changedLinks === 1 ? 'link' : 'links') + ' changed.')
else console.log('[' + new Date().toLocaleString() + '] Unknown rule applied: "' + appliedRule + '" and ' + changedLinks + ' ' + (changedLinks === 1 ? 'link' : 'links') + ' changed.')
}
}
}

// --------------------------------------------------------------------------------------------------------------------------------
// When the document is ready, trigger the function
document.onreadystatechange = applyRulesToLinks[/src]



Nichts desto trotz wäre ein Add-on mit Interface schöner, das darauf aufbaut und die Einstellungen wartbar macht und zum Beispiel erlaubt zu filternde Parameter, in die Regeln, hinzuzufügen oder zu entfernen.

Dev Note:
Das ganze funktioniert schon hinreichend und ist wesentlich einfacher zu bedienen als die bisher vorgeschlagen Lösungen. Lizenz, GPL3+, ja, weil ich denke das es arbeit war. - Auch wenn es keine Raketenwissenschaft ist.

Ansonsten, ich bin schon dabei gewesen das ganze in ein Add-on zu gießen, das unteranderem die GET Parameter sammelt und an ein UI übergibt welches diese darstellt (erstmal aufgebaut wie FlagCookies, aber das ist nicht der Stein der Weisen in dem Anwendungsfall). Jedenfalls funktioniert das schon prima.

Ich bin aktuell nur am überlegen, wie man das UI aufbaut. Aber die Grundlagen mit den Regeln und wie diese angewandt werden, stehen ja bereits schon.

Feedback ist willkommen.


Hier mal take 2 der etwas schneller läuft:

[src=javascript]// ==UserScript==
// @name GETRequestCleaner-test
// @author theSplit <touch@dwrox.net> (https://github.com/jrie)
// @description Cleans links GET Parameters based on rules and optional extra patterns using regular expressions
// @license GPL-3.0+; http://www.gnu.org/licenses/gpl-3.0.txt
// @version 0.1
// @grant none
// ==/UserScript==

// Rules
// Global rules and patterns, appliying to every page those patterns are joined
let globalRules = {
'UTM': ['utm_']
}

// On which domain names: http://$DomainTrigger - to trigger a rule by set name and domain.
// Can be 'www12.google.com' or 'google.com' or just 'google', last to target every domain where "google" occurs
// NOTE: $domainRules has to be the exact name for rules to apply!!
let domainTrigger = ['google']

// Domain specific rules triggered by $DomainTrigger - those are joined together = "(ei|biw|bih|...)"
let domainRules = {
'google': ['ei', 'biw', 'bih', 'vet', 'ved', 'source', 'iact', 'ie', 'oe', 'stick', 'gs_l', 'psy_l', 'sa', 'fg']
// Example: 'www12.google.com': ['ei', 'biw', 'bih']
}

// This are additions (regEx) to the joined $globalRules and $domainRules and appended to the regular expression.
// NOTE: This is unrequired, but can be to more precise - you can simplify or remove google perhaps as we check for '?|&'
let ruleExtras = {
'UTM': '.*=',
'google': '='
}

// Whats the name of the rule by $Trigger
// NOTE: Also this can be empty, then just we say that $trigger not $ruleName changed links!
let ruleNames = {
'UTM': 'UTM link pattern',
'google': 'Google pages'
}

// Is a console present? No need to change...
let hasConsole = window.console !== undefined

// --------------------------------------------------------------------------------------------------------------------------------

function applyRulesToLinks (evt) {
let hrefLinks = document.querySelectorAll('a')

let location = document.location.toString()

let targetLinks = []
for (let link of hrefLinks) {
if (link.href.indexOf('?') !== -1) {
targetLinks.push(link)
}
}

let modifiedByRules = {}

let tmpHref = ''
for (let link of targetLinks) {
for (let trigger of Object.keys(globalRules)) {
let ruleSetString = '(' + globalRules[trigger].join('|') + ')'

if (ruleExtras[trigger] !== undefined) ruleSetString += ruleExtras[trigger]

let regex = new RegExp('[?&]' + ruleSetString + '[^&]*', 'gi')

tmpHref = link.href.toString().replace(regex, '')

if (tmpHref.length !== link.href.length) {
if (tmpHref.indexOf('?') === -1) tmpHref = tmpHref.replace('&', '?')
link.href = tmpHref

if (modifiedByRules[trigger] === undefined) modifiedByRules[trigger] = 1
else ++modifiedByRules[trigger]
}
}
}

for (let trigger of domainTrigger) {
let domainRegEx = new RegExp('.*(' + trigger + ')[^\/]', 'i')
let domainLocationMatch = location.match(domainRegEx)

if (domainLocationMatch !== null) {
if (domainRules[trigger] !== undefined) {
let ruleSetString = '(' + domainRules[trigger].join('|') + ')'

if (ruleExtras[trigger] !== undefined) ruleSetString += ruleExtras[trigger]

let regex = new RegExp('[?&]' + ruleSetString + '[^&]*', 'gi')
let hasModifiedLink = false
for (let link of targetLinks) {
let targetHref = link.href.toString().replace(regex, '')

if (targetHref.length !== link.href.length) {
if (targetHref.indexOf('?') === -1) targetHref = targetHref.replace('&', '?')

link.href = targetHref

if (!hasModifiedLink) {
modifiedByRules[trigger] = 1
hasModifiedLink = true
} else ++modifiedByRules[trigger]
}
}
}
}
}

// ------------------------------------------------------------------------------------------------------------------------------

if (hasConsole) {
for (let appliedRule of Object.keys(modifiedByRules)) {
let changedLinks = modifiedByRules[appliedRule]
if (ruleNames[appliedRule] !== undefined) console.log('[' + new Date().toLocaleString() + '] Rule applied: "' + ruleNames[appliedRule] + '" and ' + changedLinks + ' ' + (changedLinks === 1 ? 'link' : 'links') + ' changed.')
else console.log('[' + new Date().toLocaleString() + '] Unknown rule applied: "' + appliedRule + '" and ' + changedLinks + ' ' + (changedLinks === 1 ? 'link' : 'links') + ' changed.')
}
}
}

// --------------------------------------------------------------------------------------------------------------------------------
// When the document is ready, trigger the function
document.onreadystatechange = applyRulesToLinks
[/src]
 
Zuletzt bearbeitet:

sia

gesperrt

Registriert
26 März 2015
Beiträge
5.931
Ort
FFM (NSFW)
https://addons.mozilla.org/de/firefox/addon/neat-url/

Neat URL cleans URLs, removing parameters such as Google Analytics' utm parameters.
Example
Before: http://www.phoronix.com/scan.php?pa...m=feed&utm_campaign=Feed:+Phoronix+(Phoronix)

After: http://www.phoronix.com/scan.php?page=news_item&px=Ioquake3-Auto-Updater

Custom rules can be added using the global format or the domain specific format (parameter@domain). A domain specific parameter would be, for example, utm_campaign@phoronix.com.
Parameter rules
A parameter is something that starts with ?. You can add your own parameter in the options of Neat URL. The ? is ommitted in the options, so a ?ved parameter becomes "ved". There are a few exceptions to this rule (see below)

Parameters can be global (for every domain):
utm_source

Parameters can contain @ signs (domain-specific):
nb@tweakers.net

Parameters can contain @ signs with a wildcard so every subdomain will match too:
param@*.wired.com

Parameters can contain @ signs with a wildcard at the end of a domain name (matches every domain name which begins with "google" and ends in an unknown suffix:
param@google.*

Parameters can also apply globally (first rule), except for a (wilcard) domain (second rule):

ref
!ref@amazon.co.uk

The excluded domain always takes precedence. Should you include "ref" and "!ref", "!ref" will apply.

Other valid parameters (exceptions to the ? rule):
#xtor=RSS-8 (remove this parameter - be sure to include its value as well when you are using anchor tags)
#xtor=RSS-8@futura-sciences.com
$/ref@amazon.* (remove everything after /ref on amazon domains - this will only apply when there are no query parameters left after removing the filtered query parameters)
$$/ref@amazon.* (remove everything after /ref on amazon domains - this will always apply, even when there are other query parameters after removing the filtered query parameters - this option is available because the user should be in control but beware that double dollar signs are dangerous, it might break the URL)

Invalid parameters:
param@*.google.* (too many wildcards)
!ved (this is some random string - not supported, but it might work)
/ref@amazon.*$ (dollar sign should be at the beginning)
History
Neat URL is based on Lean URL. Neat URL contains a few improvements:
* set your own URL parameters on the options page (to reach feature parity with Pure URL)
* fixed for recent Firefox versions
* a nice animation in the toolbar (can be changed or disabled)
* domain-specific blocked parameters (to reach feature parity with Pure URL)
* wildcard domain-specific blocked parameters
Bug reports and feature requests
You can open an issue on GitHub: https://github.com/Smile4ever/Neat-URL/issues/new
 
Oben