[Safari] Simpele extensie met javascript werkt niet

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • filenox
  • Registratie: Juni 2006
  • Laatst online: 31-07 10:23
Goedenavond weer


Ik wou vandaag een extensie voor Safari schrijven, niets speciaals, gewoon voor prive-gebruik.
Het enige wat het (momenteel) moet doen is een formulier invullen. In javascript zou dit gewoon dit zijn dus;
JavaScript:
1
2
3
4
5
<script type="text/javascript">

document.getElementById("first").value = "test";

</script>


En omdat de extensies in Safari ook met javascript werken is dit mijn huidige code;

JavaScript:
1
2
3
4
5
6
7
8
9
10
<script>
safari.application.addEventListener("command", performCommand, false);

function performCommand(event)
 {  
    if(event.command === "go") {
        document.getElementById("first").value = "test";
        }
 }
</script>



Dit zijn de interface-eigenschappen:
Afbeeldingslocatie: http://tweakers.net/ext/f/91gY7uAPPBJlsAibObEscGX6/full.png

Helaas doet dit script gewoon niets :+ Heeft iemand wat advies? Ik heb al verschillende websites afgezocht naar een oplossing maar helaas, jullie zijn mijn laatste hoop. :)

Acties:
  • 0 Henk 'm!

Verwijderd

Ik heb de code zelf nog niet proberen uit te voeren (ben hier via mijn gsm - zag je bericht op Twitter), maar het eerste wat ik zou proberen is te achterhalen als je event al dan niet getriggerd wordt. Wat geeft een alert(event.command)?

Heb je ook al eens gekeken als je al dan niet in de if() komt...

Ik heb me nog niet verdiept in Safari-extenties, maar dit zijn zowat de eerste zaken waar ik aan denk, hopelijk heb je er iets aan.

  • filenox
  • Registratie: Juni 2006
  • Laatst online: 31-07 10:23
Ach, bedankt voor de reactie in ieder geval ;) Alert(event.command) geeft go :) Dus de if doet het :)
Ook andere alerts doen het perfect.

[ Voor 28% gewijzigd door filenox op 24-11-2011 00:32 ]


  • luuk2005
  • Registratie: Maart 2006
  • Laatst online: 22:30
Javascript in je Global page heeft niet direct toegang tot de inhoud van een pagina. Als je iets in de pagina wilt aanpassen met een Safari extensie moet je de Javascript 'injecteren' in de pagina.

Op deze pagina uit de documentatie staat het uitgelegd :)

  • filenox
  • Registratie: Juni 2006
  • Laatst online: 31-07 10:23
Ik heb deze code in script.js gezet maar helaas doet deze ook niets..
Nuja volgens mij zit het probleem 'm dat ik niet weet hoe ik de code goed moet triggeren...

JavaScript:
1
2
3
4
<script type="text/javascript">
document.write("test");
document.getElementById("first").value = "test";
</script>


Afbeeldingslocatie: http://tweakers.net/ext/f/VYgcwny2TTe6CzVoo6SNxj41/full.png

  • luuk2005
  • Registratie: Maart 2006
  • Laatst online: 22:30
Je moet de <script> tag weglaten in je script.js. Die tag gebruik je alleen als je JavaScript in een HTML pagina zet. Zonder die tag zou het moeten werken :)

  • filenox
  • Registratie: Juni 2006
  • Laatst online: 31-07 10:23
Bedankt voor de tip, ik had niet echt ervaring met JS-bestanden :) Jammer genoeg is er nog steeds iets dat niet klopt. Dit mijn code in het JS-bestand;

JavaScript:
1
document.getElementById("password").value = "test";


Normaal gezien zou er dus de waarde test in het vakje password moeten komen, gebaseerd op deze code;
Afbeeldingslocatie: http://tweakers.net/ext/f/MOAR1kI8dJrAE1ya61K2MbrM/full.png

Dit is dus niet het geval...

  • luuk2005
  • Registratie: Maart 2006
  • Laatst online: 22:30
Ik heb nog even in de documentatie van Apple gekeken en ik denk dat je het script als End-script i.p.v. Start-script moet instellen. Een end-script wordt uitgevoerd als het laden van de pagina voltooid is.
Start Scripts—Scripts to execute before a webpage is interpreted, usually a script that blocks unwanted content.
End Scripts—Scripts to execute when the page load event occurs (roughly when a function specified in the body onload attribute would execute). Most scripts are End Scripts.
For more information, see “Injecting Scripts.”
Bron

Als dit het niet is kan je de Safari ontwikkeltools gebruiken om uit te zoeken waarom hij het element niet pakt, deze werken ook geïnjecteerde scripts.

  • filenox
  • Registratie: Juni 2006
  • Laatst online: 31-07 10:23
Dat had ik ook al geprobeerd maar helaas doet dit ook niets. Wat je zegt over die controle klopt, maar dit gaat (zover ik zie) enkel bij de Globale Pagina, niet apart bij scripts.

  • luuk2005
  • Registratie: Maart 2006
  • Laatst online: 22:30
filenox schreef op donderdag 24 november 2011 @ 22:05:
Dat had ik ook al geprobeerd maar helaas doet dit ook niets. Wat je zegt over die controle klopt, maar dit gaat (zover ik zie) enkel bij de Globale Pagina, niet apart bij scripts.
Bij de Globale Pagina staat er een button om de foutconsole te openen omdat deze pagina en scripts los staan van de 'gewone' pagina's. Omdat het script geïnjecteerd wordt kan je de gewone foutconsole van je openstaande pagina gebruiken (Activeer eerst het ontwikkel menu en dan naar Ontwikkel -> Toon foutconsole).

Acties:
  • 0 Henk 'm!

  • filenox
  • Registratie: Juni 2006
  • Laatst online: 31-07 10:23
code:
1
TypeError: 'null' is not an object (evaluating 'document.getElementById(password).value = "test"')

Deze foutmelding krijg ik bij de pagina met het formulier, op GoT krijg ik (wat normaal is)
code:
1
ReferenceError: Can't find variable: password


Ik heb al wat opgezocht ivm dit probleem maar de situaties zijn nogal verschillend met deze situatie.

Acties:
  • 0 Henk 'm!

  • filenox
  • Registratie: Juni 2006
  • Laatst online: 31-07 10:23
kick!

Acties:
  • 0 Henk 'm!

  • filenox
  • Registratie: Juni 2006
  • Laatst online: 31-07 10:23
Kan deze nog eens omhoog of kan een modje deze misschien naar een Dev-forum verplaatsen?

Acties:
  • 0 Henk 'm!

  • Hoedje
  • Registratie: April 2003
  • Laatst online: 08:26
En naar WEB :)

"If you get up in the morning and think the future is going to be better, it is a bright day. Otherwise, it's not."


Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 00:17
filenox schreef op vrijdag 25 november 2011 @ 08:27:
code:
1
TypeError: 'null' is not an object (evaluating 'document.getElementById(password).value = "test"')

Deze foutmelding krijg ik bij de pagina met het formulier, op GoT krijg ik (wat normaal is)
code:
1
ReferenceError: Can't find variable: password


Ik heb al wat opgezocht ivm dit probleem maar de situaties zijn nogal verschillend met deze situatie.
Die reference error klinkt alsof je getElementById(password) gebruikt in plaats van getElementById("password"). Als je in de ander pagina wel een variabele "password" hebt gedefinieerd verklaart dat gelijk het verschiil in output op got/de andere site.

Verder is het sowieso van belang dat het een "end script" is. GetElementById() werkt pas als het element met het betreffende id gerendered is.

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • filenox
  • Registratie: Juni 2006
  • Laatst online: 31-07 10:23
Ja dat deed de truk dus, bedankt. Het huidige script is nu;

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var gebruikersnaam = "ikbenhenk";
var wachtwoord = "deluchtismooiblauw";


if(document.location.href === "https://bepaaldewebsite/login.htm"){
document.getElementById("username").value = gebruikersnaam;
document.getElementById("password").value = wachtwoord;
document.forms["login"].submit();
}


if(document.location.href === "https://www.zegmarwat/logon.html"){
unicorn_form.elements["password"].value = wachtwoord;
unicorn_form.elements["username"].value = gebruikersnaam;
document.forms["unicorn_form"].submit();

}


Ik wil nu nog wat klooien met een userinterface zodat die variabelen zo kunnen worden ingevuld ipv via de code :)

Acties:
  • 0 Henk 'm!

  • filenox
  • Registratie: Juni 2006
  • Laatst online: 31-07 10:23
Oke.. Nu is er ook een UI gemaakt voor de extensie, een vak met de gebruikersnaam en een vakje met het wachtwoord. Hoe kan ik deze nu op een veilige manier 'verzenden' naar mijn .js-bestand? PHP lijkt me geen optie :+

Hier lees ik wel iets over de HTML5 feature 'Local storage' maar is dat wel de bedoeling? Nuja, ik bedoel maar, je kan je auto buiten laten staan op straat, dat werkt goed maar in een garage zetten is toch wat veiliger..

Afbeeldingslocatie: http://tweakers.net/ext/f/Euo9RFgRccLWpbSoULkD5E56/full.png
Pagina: 1