mikrocontroller.net

Forum: PC-Programmierung Event in Firefox extern auslösen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Daffy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich versuche gerade herauszufinden, wie ich von einem externen Skript 
aus einen Event in Firefox auslösen kann, auf den ich dann zB mit JS 
reagieren kann. Das Ganze soll lokal auf Windows funktionieren, ohne daß 
das Netzwerk involviert werden braucht. Alles innerhalb vom Konto meines 
Benutzers, daher könnte ich an etwaigen Sicherheitseinstellungen auch 
schrauben.

Ich stelle mir das idealerweise so vor:
1. Eine lokale Seite als Startseite in FF, mit einem JS Event-Listener
2. Skript startet einen Websocket Server auf Port 12345
3. Skript triggert FF zB mit Parameter 12345
4. FF verbindet an 127.0.0.1:12345
5. Skript liefert alles weitere per WS
6. Skript endet und schliesst Port 12345
7. JS Listener idlet und wartet auf den nächsten Event

Mit Ausnahme von 3 bekomme ich alles hin denke ich; nur fehlt mir da die 
entscheidende Idee. Irgendwelche externe Dienste möchte ich vermeiden, 
da es sich teilweise um private Daten handelt und sowas will ich nicht 
in's Netz pusten.

Idealerweise würde ich einen Websocket Server schreiben und den als 
Dienst laufen lassen, aber das wird leider nicht erlaubt. In meinem 
Benutzerkonto darf ich aber alles machen. Die lokale Startseite soll 
dann als eine Art Dashboard funktionieren wo dann mehrere Skripte Infos 
abliefern. Den Port-Parameter braucht es weil evtl zwei Skripte 
gleichzeitig laufen und dann jedes seinen eigenen WS Server aufmacht.

Autor: DPA (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du brauchst irgend eine shared ressource, mit der du die Notifikation 
durchführen kannst. Bei lokalen Seiten mit file:// url fallen service 
worker ja schonmal flach, null origin ist bei solchem kram immer 
schwierig. Eventuell mit localStorage?

a.html
<script>
function sendMessage(key, message){
  localStorage.setItem(key, Math.random().toFixed(8).substr(2) + JSON.stringify(message||null));
}
if(!location.hash){
  window.addEventListener('storage', function(event){
    top.postMessage({
      what: 'storage',
      key: event.key,
      value: JSON.parse(event.newValue.substr(8))
    },"*");
  });
}else{
  console.log(location.hash.substr(1).split(':',2), location.hash)
  sendMessage(...location.hash.substr(1).split(':',2));
  window.close();
}
</script>

b.html
<script>
function receiveMessage(event) {
  console.log(event.data);
}
addEventListener("message", receiveMessage, false);
</script>
<iframe src="a.html" style="display:none;"></iframe>

Öffne in b.html die console, danach in nem anderen Fenster a.html und 
füge #bla:test bei der URL hinten dran (seite neu laden, hash change ist 
kein reload...). Console sollte sowas liefern:
Object { what: "storage", key: "bla", value: "test" }

Dann musst du nur noch herausfinden, wie du die Seite im Hintergrund aus 
deinem Script starten und stoppen kannst, und fertig.

Autor: Daffy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also erst mal vielen Dank für Deine Bemühungen!

Aber bedeutet das nicht, daß a und b innerhalb von Firefox laufen, also 
in zwei Tabs? Oder kann ich auch von außen auf localStorage zugreifen?

Vielleicht war ja der von mir verwendete Begriff Skript etwas 
verwirrend. Ich meinte damit ein Programm außerhalb von Firefox, also zB 
in Python, Perl oder sowas, was von der Kommandozeile oder via 
Taskplaner gestartet wird.

Eine eine URL wie zB a.html#bla:test zuzugreifen wäre ja kein Problem, 
bloß wird damit doch nicht das Javascript ausgeführt. Das Programm 
bekommt nur den HTML Source und nichts weiter. Selbst wenn das Programm 
JS interpretieren würde, wäre es außerhalb von Firefox.

Autor: c.m. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eventuell suchst du etwas wie das Selenium Framework - 
Browserfernsteuerung.
Da gibts diverse bindings zu verschiedenen Sprachen, Java zum beispiel. 
Ob eine deiner Scriptprachen dabei ist weiss ich nicht.

Autor: DPA (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich dachte man könnte eventuell die a.html headless öffnen:
firefox.exe -headless "file:///C:/Users/abre2/Desktop/a.html#test:123"

Aber offenbar geht headless und browser modus nicht gleichzeitig im 
gleichen Profil...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.