rsadmchef
Goto Top

Userscript für Ausblenden von Elementen einer Site

Hallo Team,

ich bin heute auf die Möglichkeit aufmerksam geworden, mit UserScripts Veränderungen an einer lfd. html-site vornehmen zu können. Mein Browser Opera 9.64 ist dazu in der Lage. Worum es geht: Einige DIV-Elemente sollen ausgeblendet (bzw. nicht klickbar sein) werden, abhängig von einem bestimmten TextInhalt zwischen <div> und </div>.
Frage : Ist es komplex bzw ist eine Java-Einarbeitung vonnöten oder ist soetwas bereits als UserScript verfügbar?
Hat jmd Tipps ?
Danke im Vorraus für eure Hilfe.

Gruß rsadmchef

Content-ID: 202867

Url: https://administrator.de/forum/userscript-fuer-ausblenden-von-elementen-einer-site-202867.html

Ausgedruckt am: 27.12.2024 um 06:12 Uhr

colinardo
colinardo 06.03.2013 um 11:52:52 Uhr
Goto Top
Hi rsadmchef,
für Userscripts reicht JavaScript. Ein universell verwendbares Script für deinen Fall wirst du sehr wahrscheinlich nicht finden. Wenn du aber den entsprechenden HTML-Code hier postest oder uns einen Link zu der Seite gibst, und die Kriterien für das Ausblenden angibst kann ich dir ein entsprechendes Userscript zusammenstellen.
Grüße Uwe
colinardo
colinardo 06.03.2013 aktualisiert um 12:24:48 Uhr
Goto Top
Wenn dein div keine ID hat kannst du folgendes Userscript für deinen Fall anpassen :
Was du anpassen musst ist die RegularExpression in Zeile 1. Wenn du dich damit nicht auskennnst poste einfach dein zu matchendes Textmuster hier, dann kriegst du's geliefert face-wink.
var myregexp = /^Der Inhalt des divs den du suchst$/i;
var divs = document.getElementsByTagName("div");  

for (i=0;i< divs.length;i++){
   if (myregexp.test(divs[i].innerHTML)) {
	divs[i].style.display = "none";  
   }
}
rsadmchef
rsadmchef 06.03.2013 um 15:54:56 Uhr
Goto Top
Hallo @colinardo

es geht um den Text "Helden.gif"

Auszug
<div>
...
<img src="http://www.domain.de/images/Helden.gif"  
...
</div>
wobei Helden auch kleingeschrieben sein kann.

vlt so:
var myregexp = /^[Hh]elden.gif$/i; 
oder so:
var myregexp = /^http://www.domain.de/images/[Hh]elden.gif$/i; ??

Gruß @rsadmchef
colinardo
colinardo 06.03.2013 aktualisiert um 17:13:58 Uhr
Goto Top
OK dafür diesen Fall habe ich jetzt einen anderen Weg gewält:
Da es mit obigen Code Probleme gibt wenn die divs geschachtelt sind, nimmt dieser Code folgende vorgehensweise:
Er holt sich alle Bilder in ein Array und prüft sie auf das vorhandensein deiner URL; wenn er dieses Bild gefunden hat nimmt er den DIV-Container indem das Bild enthalten ist und blendet ihn aus.
var regex = /^http:\/\/www\.domain\.de\/images\/[Hh]elden.gif$/i;
var imgTags = document.getElementsByTagName("img");  
for (x=0;x<imgTags.length;x++){
   if (regex.test(imgTags[x].src)){
	var parentDiv = imgTags[x].parentNode;
	parentDiv.style.display = "none";  
   }
}

Grüße Uwe
rsadmchef
rsadmchef 07.03.2013 um 09:45:24 Uhr
Goto Top
Prima colinardo, hat funktioniert. Die Helden-Links sind nicht dargestellt.
Kann die Variable "regex" so erweitert werden, daß auch verschiedene Hyper-Links im gleichen Script abgeschaltet werden können oder muß dann für jedes einzelne regex ein extra userscript erzeugt werden ?

regex = /^http:\/\/www\.domain\.de\/images\/[Hh]elden.gif$/i;
regex0 = /^http:\/\/www\.domain\.de\/images\/[Ty]ypen.gif$/i; 
regex1 = /^http:\/\/www\.domain\.de\/images\/[Mm]eister.gif$/i;

alles verschiedene Gifs.
mfg rsadmchef
colinardo
colinardo 07.03.2013 aktualisiert um 13:23:16 Uhr
Goto Top
Nein du kannst das alles in ein Regex packen mit jeweils einem "|" (dies bedeutet "oder") voneinander getrennt:
var regex = /^http:\/\/www\.domain\.de\/images\/[Hh]elden.gif$|^http:\/\/www\.domain\.de\/images\/[Tt]ypen.gif$|^http:\/\/www\.domain\.de\/images\/[Mm]eister.gif$/i;

oder die Kurzform wenn die Domain-Pfade gleich bleiben:
var regex = /^http:\/\/www\.domain\.de\/images\/([Hh]elden\.gif|[Tt]ypen\.gif|[Mm]eister\.gif)$/i;

Grüße Uwe
rsadmchef
rsadmchef 09.03.2013 um 20:02:18 Uhr
Goto Top
Alles prima.
Ich komme nochmal auf Dein 1. Script zurück.
Im div-Block der Site ist der Begriff "Lederhose" vorhanden, vor einem a href tag.

var myregexp = /^Lederhose$/i;

Der Link "Nochmal" ist nach wie vor klickbar.
Was ist falsch?

Der Div Block:

<div align="center" onclick="this.style.display = 'none'">  
   <table border="0" width="450">  
   <tr>
   <td><table border="1" width="450" bgcolor="#F0E2C1">  
   <tr>
   <td><center><font size="2" face="Verdana" color="#000000"><b><br>MessageID 16</b></font></center></td>  
   </tr>
   <tr>
    <td valign="top"><center><font face="Verdana" color="#000000" size="2"><b>Lederhose</b></font></center></td>  
<tr><td height="35" align="center">  
   <a href="richtig.php" target="_blank" style="text-decoration: none"><font face="Verdana" color="#000000" size="2"><b>Nochmal</b></font></a></td></tr><tr><td>  
   <center><font face="Verdana" color="#000000" size="2"><b>Kein Bedarf</b></font></center></td></tr></table><br><br></td></tr></table></div>  

mfG rsadmchef
colinardo
colinardo 09.03.2013 aktualisiert um 21:42:32 Uhr
Goto Top
ich empfehle Dir etwas Regular Expressions zu lernen. Such
mal in Google. Dann wirst du rausfinden was das ^ am Anfang des Regex und das $ am Ende bedeuten.
^ ---> kennzeichnet den Anfang des Strings
$ ---> kennzeichnet das Ende des Strings
d.h. bei deinem Regex würde nur folgendes DIV-Tag gematcht:
 <DIV>Lederhose</DIV>
es dürfte also nichts weiter als das Wort "Lederhose" drin stehen, wegen den Kennzeichnern für den Anfang und das Ende des Strings.
Was du willst kannst du so schreiben:
 var Regex = /Lederhose/i;

oder
 var Regex = /.*Lederhose.*/i;

der Punkt bedeutet es wird alles gematcht und das Sternchen bedeutet das das vorangegangene Zeichen 0 oder mehrmal vorkommen kann.

Das Problem mit dem ersten Code kommt dann zum tragen wenn mehrere Divs geschachtelt sind. Dann wird nämlich der erste DIV in dem er das Wort "Lederhose" findet schon ausgeblendet; das könnte im schlimmsten Fall der erste DIV der HTML-Seite sein und dann wird natürlich fast alles ausgeblendet.
Dies kannst du umgehen indem du die DIV's bis zum Ziel-DIV zählst und dann diesen per Index (x) ausblendest:
 divs[x].style.display = "none";
oder mehr individuell vorhandenen Code am Anfang des Divs matchst:
 var Regex = /^<table border="0" width="450">.*Lederhose.*/i;
escape
escape 20.05.2014 um 18:24:56 Uhr
Goto Top
Hallo Uwe
Ich weiss, dieser Beitrag ist schon etwas älter, aber genau das was ich brauche.

Ich habe eine Seite, auf der auch Werbung eingebunden ist. Das ganze habe ich ebenfalls als Premium eingerichtet. Das heisst dort soll kein Werbung erscheinen. www.meine Seite (Werbung) www.meineSeite/premium (ohne Werbung)

Da ich für die Informationsseiten und Contact usw. immer das gleiche PHP verwende um doppelten Content bei Google zu vermeiden, benötige ich ein Verfahren um auf die premium-domain die Werbung auszublenden.

Die Werbung ist so eingebunden:

<center><script type="text/javascript">  
var uri = 'http://impch.xxxx.com/imp?type(iframe)pool(xxxx)a(xxxx)' + new String (Math.random()).substring (2, 11);  
document.write('<iframe src="'+uri +'" width="468" height="60" style="margin: 0px 0px; border: 1px solid black;" frameborder="0" border="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>');  
</script></center>

Kannst du mir dabei helfen?

Danke und Gruss
Mauro
colinardo
colinardo 20.05.2014 aktualisiert um 18:31:59 Uhr
Goto Top
Hallo Mauro, Wilkommen bei Administrator.de!
Das Thema oben ist aber ein ganz anderes, denn hier geht es um ein Userscript für die Verwendung auf Client-Seite im Browser (z.B. in Firefox mit Greasemonkey). Mit PHP steht dir doch das ganze Arsenal an Funktionen zur Verfügung um auf bestimmten Seiten eben den Werbeblock anzuzeigen, oder eben nicht. Ansonsten lässt sich Content auch mit jQuery und JavaScript ausblenden.

Grüße Uwe
escape
escape 20.05.2014 um 18:31:39 Uhr
Goto Top
aha.. da habe ich was missverstanden.. sorry

Aber kannst du mir trotzdem helfen?

Gruss Mauro
colinardo
colinardo 20.05.2014 aktualisiert um 18:45:06 Uhr
Goto Top
Also zuerst solltest du den Werbeteil eindeutig kennzeichen, z.B. mit einem umschließenden DIV mit ID oder Klassennamen, damit auf dies entsprechend einfacher zugegriffen werden kann. Im Beispiel nehmen wir mal ein DIV mit dem Klassennamen werbung:
<div class="werbung"> ....hier kommt deine Werbung rein  ....</div>
Das machst du mit allen Werbebannern.
Dann baust du auf deiner Premium-Seite folgendes Java-Script-Snippet ein, welches beim Laden der Seite alle DIVs mit der Klasse werbung ausblendet:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>  
<script type="text/javascript">  
$(document).ready(function(e) {
	$("div.werbung").hide();  
        // oder alternativ komplett aus dem DOM ausblenden
         // $("div.werbung").css("display","none");  
});
</script>
Wie gesagt das ist eine Java-Script-Lösung. Cleaner wäre es wenn du das schon im Aufbau deiner Seiten mit PHP integrieren würdest damit der Werbe-Code erst gar nicht geladen wird, dazu fehlt mir aber die Info wie deine Seiten aufgebaut sind.

Alles weitere bitte via PM damit wir hier das Thema des Threads nicht verlassen. Merci.
Grüße Uwe