Seite in Chrome ohne Plugin automatisch neu laden

12

Mit dem TabMixPlus-Plugin für Firefox oder Chrome kann ich mit der rechten Maustaste auf eine Seite klicken und "Alle neu laden ..." auswählen und ein Intervall auswählen.

Ich würde es vorziehen, kein Plugin zu installieren, es sei denn, ich muss es wirklich, und mir ist bewusst, dass Sie spezielle Dinge in die Adressleiste von Chrome eingeben können.

Dies lässt mich denken, dass so etwas, das direkt in die Adresse eingegeben wurde, funktionieren könnte:

javascript:setInterval(window.location.reload(), 2000); //2 secs`

Ich habe es noch nicht geschafft, möchte es aber trotzdem nicht als Möglichkeit ausschließen.

Ist das möglich?

jon
quelle
Warum bist du gegen ein Plugin? Wenn Sie so besorgt sind, schreiben Sie einfach Ihr eigenes Plugin, das genau das tut, was Sie wollen.
Ramhound
Ich bin nicht gegen Plugins, sorry wenn es so liest. Ich möchte nur ein bisschen mehr über die Funktionen der Adressleiste von Chrome erfahren :)
Jon
Warum haben Sie nicht versucht, dies in die Adressleiste einzugeben?
Toby Allen
Ich habe, siehei haven't managed it yet
Jon
Das Problem ist, dass nach dem Aufrufen location.reload()und dem erneuten Laden der Seite für Chrome im Grunde genommen das Laden einer neuen Seite und der Kontext völlig neu sind (die zuvor eingegebenen Daten gehen verloren). Sie müssen also Ihren Code irgendwie beibehalten und die Seite muss dieselbe sein, weshalb die iframe-Lösung der Antwort lautet.
ShreevatsaR

Antworten:

13

Nach 6 Jahren habe ich eine Lösung dafür!

Die Antwort ist von den anderen Antworten hier inspiriert.

Edubs Antwort hat bei mir nicht funktioniert, sie hat die Seite immer wieder neu geladen und den Dauerparameter nicht beachtet setInterval. Ich verstehe nicht, warum Edubs Antwort nicht wie erwartet funktioniert.

Dies funktioniert bei mir in Chrome 67:

javascript:document.getElementsByTagName("body")[0].innerHTML = "<iframe id=\"testFrame\" src=\""+window.location.toString()+"\" style=\"position: absolute; top:0; left:0; right:0; bottom:0; width:100%; height:100%;\"><\/iframe>";reloadTimer = setInterval(function(){ document.getElementById("testFrame").src=document.getElementById("testFrame").src },10000)

Formatierte Version:

document.getElementsByTagName("body")[0].innerHTML = 
"<iframe id=\"testFrame\" 
        src=\"" + window.location.toString() + "\" 
      style=\"position: absolute; top:0; left:0; right:0; bottom:0; width:100%; height:100%;\">
<\/iframe>";
reloadTimer = setInterval(
    function(){ 
        document.getElementById("testFrame").src=document.getElementById("testFrame").src
    },
    10000
)

Dies funktioniert, indem der aktuelle Dokumentkörper durch einen Iframe ersetzt wird, der auf den aktuellen Speicherort des Fensters zeigt.

Dann wird setInterval aufgerufen, wodurch die Seite auf einem Timer neu geladen wird.

Dies funktioniert gut als Lesezeichen. Die Komplementärfunktion von setInterval kann auch als Lesezeichen aufgerufen werden:javascript:clearTimer(reloadTimer)

Anmerkungen:

  • Einige Sites erkennen, dass über einen Iframe auf sie zugegriffen wird, und versuchen, den Zugriff zu verhindern (z. B. Stack-Sites!).

  • Browser entfernen das Präfix javascript:beim Einfügen in die Adressleiste, sodass es manuell eingegeben werden muss. javascript:Wird jedoch nicht entfernt, wenn über ein Lesezeichen eingegeben.

jon
quelle
11

Sie können dies über die Chrome Developer Tools mithilfe einer Tastenkombination tun ctrl+shift+j. Laden Sie die gewünschte Seite, z. B. http://www.w3schools.com/jsref/dom_obj_frame.asp, und klicken Sie dann auf ctrl+shift+j, um die Entwicklertools zu öffnen. Klicken Sie mit der rechten Maustaste auf das Body-Tag und wählen Sie Bearbeiten als HTML. Ersetzen Sie den inneren Inhalt (lassen Sie das Tag und schließende Tags intakt) durch Folgendes:

<iframe id="testFrame" src="http://www.w3schools.com/jsref/dom_obj_frame.asp" style="position: absolute; top:0; left:0; right:0; bottom:0; width:100%; height:100%;" onload="setInterval(document.getElementById('testFrame').contentWindow.location.reload(), 10000);"></iframe>

Um die Bearbeitung als HTML zu beenden, können Sie entweder escauf eines der Tags außerhalb des von Ihnen bearbeiteten Tags klicken oder darauf klicken. Die Seite sollte alle 10 Sekunden neu geladen werden. Sie können die Entwicklertools schließen, wenn Sie möchten, und sie wird weiterhin aktualisiert, es wird kein Plugin benötigt :)

Justin Buser
quelle
Danke Justin, das funktioniert, also habe ich upvoted, aber es ist nicht die Antwort, nach der ich gesucht habe, also wird die Frage in der Hoffnung offen bleiben :) Auch F12 nicht?
Jon
3

Die Lösung von Justin Buser einen Schritt weiter zu führen, führte mich zu:

document.getElementsByTagName("body")[0].innerHTML = "<iframe id=\"testFrame\" src=\""+window.location.toString()+"\" style=\"position: absolute; top:0; left:0; right:0; bottom:0; width:100%; height:100%;\" onload=\"setInterval(document.getElementById(\'testFrame\').contentWindow.location.reload(), 10000);\"><\/iframe>"

Die Idee, die Site in einen Iframe einzubetten, um sie neu laden zu können, funktioniert einwandfrei (denke ich). Ich habe gerade einen Code geschrieben, um das Körperelement zu erhalten und die innere HTML durch einen Iframe für die aktuelle URL zu ersetzen.

Auf diese Weise ist es möglich, JavaScript-Code mit einem Lesezeichen zu versehen und an einer beliebigen Site auszulösen, um ihn neu zu laden. Ich hoffe es hilft.

Edub
quelle