Denna delen av 99 uppdateras inte längre utan har arkiverats inför framtiden som ett museum.
Här kan du läsa mer om varför.
Mac-nyheter hittar du på Macradion.com och forumet hittar du via Applebubblan.

Kan man "trycka" på knappar i webbläsare med kod?

Tråden skapades och har fått 11 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • 2011-08-31 21:43

Jag vill sätta kortkommandon på funktioner en webbsida, ungefär som inmatningsfältet här på 99.se, dvs på knappen Skapa diskussion, kanske på typograferingsknapparna och så vidare.
Är det möjligt att göra med kod i något skriptspråk man sedan kan koppla kortkommandon till, tex applescript eller annat man kan nästla i AS?

Har för mig att jag gjorde nån IDS prototyp mha en webserver addin som gjorde att jag kunde exekvera shellscript via php. Ska ta och googla lite och se om jag hittar.

  • Medlem
  • 2011-08-31 22:14

Om jag förstår dig rätt menar jag tvärt om. Jag vill köra trycka en tangentkombination på datorn som ska ge samma resultat som om jag klickade på en knapp i en webbläsare, typ "Svara" på den här sidan.

Kan detta kanske vara något? Automator Virtual Input V3.0 Take control of the keyboard and mouse via Automator
Det låter onekligen intressant att man bygger ut Automators funktionalitet för då har man ju kvar de bra grejerna med Automator också.
Trial finns på sidan.

Jorå, man kan göra så kallade userscripts i JavaScript, eller för den delen vanliga extensions/plugins. Det finns massvis med info om det på nätet, jag har tyvärr inte någon bra förstasida att börja med på rak arm. Dock kräver dom att man har webbläsaren aktiv, så om det är globala kortkommandon som behövs så blir det till att kika vidare.

Det här verkar fungera i Safari. Scriptet öppnar denna sida och klickar på "Skapa inlägg"

tell application "Safari"
	open location "http://www.99.se/internet-bredband/289360-try..."
	delay 1
	do JavaScript "function fireEvent(obj,evt){
	var fireOnThis = obj;
	if( document.createEvent ) {
	  var evObj = document.createEvent('MouseEvents');
	  evObj.initEvent( evt, true, false );
	  fireOnThis.dispatchEvent(evObj);
	} else if( document.createEventObject ) {
	  fireOnThis.fireEvent('on'+evt);
	}
};
fireEvent(document.getElementById(\"newreplylink_top\"),'click');" in front document
end tell

Edit: Delay 1 kan tas bort eller behöva justeras beroende på hur snabbt sidan laddas.

Senast redigerat 2011-09-01 09:46

Det är flera delproblem som ska lösas och man måste ha lite koll på vad en browser får och inte får göra för att bryta ner det.

Det första problemet är hur man kopplar kortkommandon till gränssnittselement. Jag har inte jobbat med det själv, men jag noterar att det finns flera plugins till ramverk som t.ex. jQuery, så man slipper uppfinna hjulet själv.

Ett kortkommando innebär dock inte att en browser får exekvera kod hur som helst. Tvärtom gäller oerhört tighta restriktioner och i princip får du inte göra ett smack för att t.ex. exekvera AppleScript / ShellScripts etc (vilket är en jäkla tur det kan tilläggas)

Alltså får du i sådana fall sätta upp en server, precis som Mattias säger, där servern kan exekverar t.ex. PHP, och på omvägar och med rätt stort bök också AppleScript.

Problemet (eller möjligheten) med den ansatsen är då att scriptet då exekveras på servern, vilket ju vanligtvis är en annan maskin än den där webbsidan visas. Självklart är det möjligt att t.ex. köra en lokal webserver och då få det att ske på samma maskin.

Ett annat alternativ till en webbserver är att ha en helper app som definierar ett eget protokoll / URL handler, av typen "myprotocol://myserver/mypage[args]" Det som då händer är att vid t.ex. klick på en länk av det slaget tas länkförfrågan hand om av helper appen, som i sin tur får göra vad du ber om.

Ytterligare ett alternativ är att t.ex. göra en AIR-applikation, som får göra saker som en Browser inte är i närheten av, men som självklart kräver installation av programmet (kan ske via en hemsida) och AIR-ramverket.

Man kan koppla ett kortkommando till applescript-exemplet ovan och köra det från datorn (globalt eller från lämplig app). Men om man vill ha en mer generell funktion kan lägga in javascriptet som bokmärke (s.k. bookmarklet). Om man lägger det i Safaris bokmärkesrad får man dessutom automatiskt ett kortkommando. Första bokmärket nås med cmd+1 o.s.v.

Öppna bokmärken (alt+cmd+B) och aktivera bokmärkesraden under "samlingar". Klistra helt enkelt in "länken" nedan och lägg det överst så kan man klicka på "Skapa inlägg" i godtycklig 99-tråd genom att skriva cmd+1.

javascript:function%20fireEvent(obj,evt){%09var%20fireOnThis%20=%20obj;%09if(%20document.createEvent%20)%20{%09%20%20var%20evObj%20=%20document.createEvent('MouseEvents');%09%20%20evObj.initEvent(%20evt,%20true,%20false%20);%09%20%20fireOnThis.dispatchEvent(evObj);%09}%20else%20if(%20document.createEventObject%20)%20{%09%20%20fireOnThis.fireEvent('on'+evt);%09}};fireEvent(document.getElementById("newreplylink_top"),'click');

Om jag känner Baron rätt så vill han bygga ett webbgränssnitt för att kunna styra några andra processor, vilket inte låter sig göras så lätt (men jag tror han skulle behöva förtydliga vad han egentligen vill göra)

  • Medlem
  • 2011-09-01 12:53

Tack alla, det var mycket intressant. Jag ska se om det går att utnyttja i vår miljö.
Grejen är att vi ska ersätta ett system med ett annat som saknar klienter och som i stället hanteras genom en webbläsare. Systemet är mycket outvecklat gällande kortkommandon, så jag vill kunna lägga på kortkommandon "utifrån" om vi inte kan få utvecklarna att bygga in det åt oss.

  • Medlem
  • 2012-02-02 21:34

Jag har hittat Fake som gör exakt det jag begär i kombination med lite applescript.

tell application "Fake"
	tell selected tab of browser window 1
		try
			click element with text "Ettan"
		on error
			try
				click element with text "Redigera"
			on error
				display dialog "Det finns ingen knapp på den aktuella sidan med texten \"Redigera\" eller \"Ettan\"."
			end try
		end try
	end tell
end [B]tell

[/B]

Kul och väldigt Macig programidé. Ska definitivt kolla närmare på när jag hinner.

1
Bevaka tråden