JavaScript Textfilter in For/If Schleife Infinity Loop

shoa66

Lt. Junior Grade
Registriert
Mai 2005
Beiträge
314
Hey zusammen,

habe mir folgendes, vermutlich vom Code her sicher nicht sehr elegante - aber funktionierende - Java Script für Google Chrome in Verbindung mit Tampermonkey geschrieben:

Code:
var links = document.getElementsByTagName( 'a' );
var element;
function OpenInNewTab(url) {
  var win = window.open(url, '_blank');
  win.focus();
}

for ( var i = 0; i < links.length; i++ ) {
    
    element = links[ i ];
    
    if ( element.href.indexOf( "http://meineurl.com/shop/produkte.php?id=produkt1234" ) == 0 ){   element.style.color = "#ff0000"; OpenInNewTab("http://meineurl.com/shop/produkte.php?id=produkt1234"); }

Eine Seite wird jede Sekunde aktualisiert (Code dazu jetzt zur Vereinfachung nicht dabei) und wenn das gewünschte Produkt (anhand des Links) gefunden wird, wird es rot markiert und besagter Link soll in einem neuen Tab automatisch aufgehen.

Das Problem, welches ich selbst leider nicht lösen kann, ist dass die neue Seite ja erneut die gesuchte URL enthält und somit - in einer Endlosschleife - neue Tabs aufgehen.

Ich komme leider wirklich nicht drauf, wie sich das ganze lösen lassen könnte, da das Script ja in Tampermonkey global läuft und somit eine variable "finish" inkl. zugehöriger Schleife rund rum nicht auch nicht funktioniert.

i hochzählen, dass die for Schleife nicht mehr weiter läuft, bringt leider auch nichts, da das Skript im neuen Tab ja ohnehin wieder bei 0 beginnt :(

Hat irgendjemand eine Idee, wie das funktionieren könnte?
 
Es ist doch garantiert möglich das Skript auf bestimmte URLs zu beschränken. Falls eine solche Funktion wider Erwarten nicht Teil von Tampermonkey ist, musst du selbst am Anfang deines Skripts prüfen auf welcher Seite (URL) du dich grad befindest und den Rest nur ausführen wenn die deiner Ausgangseite entspricht.
 
Daran hatte ich schon gedacht, leider ist die URL in der Praxis bis auf die ID (Ausgangs ID ist aber leider auch nicht immer gleich) identisch, was die Sache noch deutlich komplizierter macht.
 
Also ehrlich...
Ich hab ein neues Skript erstellt und da steht doch schon fast alles da.
Code:
// ==UserScript==
// @name       test
// @version    0.1
// @description  enter something useful
// @match      https://www.computerbase.de/forum/threads/textfilter-in-for-if-schleife-infinity-loop.1366866/
// @match      https://www.computerbase.de/
// @copyright  2012+, You
// ==/UserScript==

alert("test");

Entscheidend für dich ist das Match. Es sind Wildcards möglich und für mehrere URLs nimmt man einfach mehrere @match. Hier ist die Doku die man über Google eigentlich gar nicht verfehlen kann http://tampermonkey.net/documentation.php

Wenn du Probleme hast ein oder mehrere Patterns für deine URLs zu erstellen müsstest du mal schreiben wie die aussehen.
 
So hatte ich es zuvor probiert, ging aber nicht. Ich denke hier beißen sich tatsächlich die URL patterns.

Evtl. siehst du ja mehr als ich:

// @include http://meineurl.com/shop/*
// @exclude http://meineurl.com/shop/prodcuts/*

Konkret soll das Script dann auf der Seite http://meineurl.com/shop/search?q=productxyz laufen, aber auf der Produktseite http://meineurl.com/shop/prodcuts/productxyz nicht mehr!

Eine zweite Idee wäre eine if Abfrage vor dem ganzen Rest:

Code:
var url = document.location;

if ( url == "http://meineurl.com/shop/") {

...
}

Das Problem ist, dass ich dann die konkrete Such-URL angeben muss, die sich aber ändern kann.

if url == http://meineurl.com/shop/* mit * geht ja leider nicht, oder?
 
Ah, jetzt weiß ich auch woran es gescheitert ist. Hatte sowohl @include als auch @exclude unterhalb des

// ==/UserScript==

Tags. So funktioniert das natürlich nicht :(

Hab vielen Dank für deine Geduld und Hilfe. Auch besten Dank für den kurzen und knackigen Include ;)
 
Zurück
Oben