Ne also ich habe die url jetzt in allen Varianten probiert und auch Schlüsselwörter verändert und auch welche aus den echten url-Adressen genommen, nix passiert.
Alle Links mit Schlüsselwort öffnen
-
nightfox -
8. Februar 2009 um 14:36 -
Erledigt
-
-
Ohne die Seite zu kennen, wird es immer schwieriger dir weiter zu helfen.
Nutzt die Seite javascript-Links oder wird sie durch Javascript dynamisch aufgebaut?
Erscheinen in der Fehlerkonsole (Extras->Fehlerkonsole) irgendwelche Meldungen? -
Zitat von A.J.
Hier das Greasemonkey Script:
Code
Alles anzeigen// ==UserScript== // @name Alle Links mit Schlüsselwort öffnen // @namespace http://www.w3.org/1999/xhtml // @include URL // ==/UserScript== a = document.getElementsByTagName('a'); for (i = 0; i < a.length; i++) { if (a[i].getAttribute('href')) { if (a[i].textContent.indexOf('Schlüsselwort') != -1) { if(a[i].getAttribute('href').match(/.*:\/\/.*/)) { GM_openInTab(a[i].getAttribute('href')); } else { if(a[i].getAttribute('href').slice(0, 1) == "/") { GM_openInTab(document.location.protocol + "//" + document.location.hostname + a[i].getAttribute('href')); } else { GM_openInTab(document.location.protocol + "//" + document.location.hostname + document.location.pathname.match(/.*\//) + a[i].getAttribute('href')); } } } } }
Wenn du nach der Prüfung auf das Vorhandensein des Attributs href und des Schlüsselworts statt a[i].getAttribute('href') a[i].href verwendest, werden relative Links unmittelbar aufgelöst.
Der Code lässt sich dann eindampfen zu:Codea = document.getElementsByTagName('a'); for (i = 0; i < a.length; i++) { if (a[i].getAttribute('href')) { if (a[i].textContent.indexOf('Schlüsselwort') != -1) { GM_openInTab(a[i].href); } } }
So sparst du dir den Code danach, der insbesondere auch keine Portnummern berücksichtigt und nicht alle möglichen Fälle abdeckt (bspw. Referenzen über file:// - da dort auch der letzte Slash fehlen kann und daher nicht der vollständige Pfad erfasst wird. -
Wenn ich window.open() verwende werden relative Links auch unmittelbar aufgelöst.
Im Detail:
window.open(a[i].getAttribute('href')) und window.open(a[i].href) funktionieren sowohl für relative als auch absolute Links.
GM_openInTab(a[i].getAttribute('href')) funktioniert nur für absolute Links (relative produzieren nur Müll).
GM_openInTab(a[i].href) funktioniert für absolute und relative Links.Was lernen wir daraus?
Alle Methoden haben ihre Vor- und Nachteile.* UND: Viele Wege führen zum Ziel.Desweiteren:
1) Bezügl. Portnummern: Portnummer werden nur sehr selten verwendet weshalb ich sie (bewusst) ignoriert habe. Wenn sie benötigt werden, wäre das Userscript jedoch jederzeit leicht erweiterbar.
2) Bezügl. file://-URIs: Diese werden je nach Browser und Betriebssystem verschieden gehandhabt und sind daher sowieso alles anderen als einheitlich / verlässlich.------
*Auf weitere Vor- und Nachteile von window.open() <-> GM_openInTab() bin ich ja schon weiter oben eingegangen. -
Ob du nun die GM-Api verwendest oder window.open, ich sprach davon statt getAttribute href direkt zu nutzen. Das reduziert deinen Code, macht ihn so weniger fehleranfällig. Zudem treten die Probleme mit Portnummern und den file-Referenzen nicht auf.
ZitatAlle Methoden haben ihre Vor- und Nachteile
Wo ist da nun der Nachteil gegenüber der bisherigen Lösung? Ich sehe da nur Vorteile. -
In diesem Fall ist a[i].href in Verbindung mit GM_openInTab() klar im Vorteil, da stimme ich dir zu.
Generell bevorzuge ich aber a[i].getAttribute() und a[i].setAttribute(), da dies für alle Attribute funktioniert (auch für neu erfundene*) und man IMHO bei komplexem Code bei diesen schneller erkennen kann, ob ein Attribut gelesen oder geschrieben wird.
Darauf bezog sich mein "Vor- und Nachteile" hauptsächlich; das eine ist in diesem speziellen Fall besser, das andere (wie schon gesagt, meiner Meinung nach, ein Anderer ist da evtl. grundsätzlich anderer Meinung) übersichtlicher.
(Auch ist el.getAttribute() DOM2-Standard; bei el.href bin ich mir nicht sicher, kann aber im MDC darüber auch nichts finden, ob es standardisiert wurde oder nicht)
Bezüglich der Tatsache, dass ich nochmals auf GM_openInTab() und window.open() zurückkam: Ich wollte nur zeigen, dass es bei window.open() egal ist was man verwendet, bei GM_openInTab() nicht. Wenn sich beide gleich verhielten, bräuchte man diese Überlegungen gar nicht, man könnte einfach immer beide (el.getAttribute + el.href) verwenden, da es egal wäre, ob eine relative oder absolute URL übergeben wird, da beides korrekt interpretiert werden würde.
Aber das ist etwas, was sowieso nur der Entwickler von Greasemonkey beeinflussen kann. Denn ich denke es wäre einfacher und logischer, wenn sich GM_openInTab() bezügl. relativen URLs und Referrer gleich verhalten würde wie window.open(). Allerdings weiß ich nicht wie schwierig es wäre dies in der Erweiterung umzusetzen...
-----
*Manche Webseiten (und Erweiterungen) tun dies tatsächlich. Und in speziellen Fällen muss man auch diese lesen+schreiben können. -
Zitat
Denn ich denke es wäre einfacher und logischer, wenn sich GM_openInTab() bezügl. relativen URLs und Referrer gleich verhalten würde wie window.open().
Der Gedanke kam mir beim Studieren der GM-APIs auch schon des öfteren. Mir sind die Gründe nicht bekannt, warum das auf diese Weise umgesetzt wurde. Dies intern zu ändern sollte wohl machbar sein.
ZitatGenerell bevorzuge ich aber a[i].getAttribute() und a[i].setAttribute(), da dies für alle Attribute funktioniert
Meistens nutze ich das auch, die genannten Gründe kann ich nur bekräftigen.
ZitatAuch ist el.getAttribute() DOM2-Standard; bei el.href bin ich mir nicht sicher
-