Toon posts:

[XUL] Bij het laden van een pagina een script uitvoeren

Pagina: 1
Acties:

Verwijderd

Topicstarter
Heey,

Ik ben bezig met het scrhijven van een firefox extentie. De simpele dingetjes zijn me allemaal al gelukt (extra menu's enz) nou heb'k een vraag, als ik dit heb:

<window onload="alert('bla')">
</window>

In mijn xul heb neergezet, uiteraard met geldige doctype declaraties enz.
Wat ik hiermee wil berijken is dat voor de pagina geladen wordt (dus zodra iemand naar een andere pagina gaat) dat er een javascriptje geactiveerd wordt.

Ik heb uiteraard google en het forum doorgespit,. maar ik kon er niks over vinden, heeft iemand enig idee hoe ik dit moet oplossen of zit ik totaal op de verkeerde richting te denken?

Verwijderd

Bedoel je niet onunload?

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Met zo'n event gaat dat natuurlijk nooit werken.
Je moet een event listener koppelen aan het browserdocument, hoe dat moet staat prima beschreven in de uitgebreide documentatie op MDC. Welk event en waarop moet je even uitzoeken dat weet ik zo 123 niet, maar ook daar moet je zo achter zien te komen.

edit:

sterker nog, na een paar minuten rond klikken heb ik zelfs een kant en klaar voorbeeld gevonden :o
vraag me echt af hoe jij hebt gezocht :X

http://kb.mozillazine.org/On_Page_Load
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
window.addEventListener("load", function() { myExtension.init(); }, false);

var myExtension = {
  init: function() {
    var appcontent = document.getElementById("appcontent");   // browser
    if(appcontent)
      appcontent.addEventListener("load", this.onPageLoad, true);
    var messagepane = document.getElementById("messagepane"); // mail
    if(messagepane)
      messagepane.addEventListener("load", this.onPageLoad, true);
  },

  onPageLoad: function(aEvent) {
    var doc = aEvent.originalTarget; // doc is document that triggered "onload" event
    // do something with the loaded page.
    // doc.location is a Location object (see below for a link).
    // You can use it to make your code executed on certain pages only.
    if(doc.location.href.search("forum") > -1)
      alert("a forum page is loaded");
  }
}

[ Voor 61% gewijzigd door Erkens op 07-01-2007 23:13 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
Dat voorbeeld had ik ook gevonden *uiteaard gezocht* maar dit voorbeeld werkte dus niet,. Ik had de if voor alleen de forum site's eruit gehaalt, en dit in de xul gezet maar het werkte niet:(

Verder heb ik ergens gelezen dat het <window> <overlay> <page> nog uitmaakt voor de versie's van firefox?

Verwijderd

Topicstarter
weet iemand een voorbeeld extentie anders waarin het gebeurt, dan kan ik de events daar vast wel uitslopen.

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Verwijderd schreef op maandag 08 januari 2007 @ 09:15:
Dat voorbeeld had ik ook gevonden *uiteaard gezocht* maar dit voorbeeld werkte dus niet,. Ik had de if voor alleen de forum site's eruit gehaalt, en dit in de xul gezet maar het werkte niet:(

Verder heb ik ergens gelezen dat het <window> <overlay> <page> nog uitmaakt voor de versie's van firefox?
right, ik krijg bij deze post een soort gevoel van dat je eigenljik niet weet waar je over praat. Je werkt met overlays, die leg je als het ware dus over de browser heen om deze bijvoorbeeld uittebreiden. Lees je nog maar eens in over XUL :)

Maargoed, wat werkt er niet dan? Geef dan eens wat meer van je code, aan zo'n niks zeggend stukje code wat je in je post hebt hebben we natuurlijk niks (buiten het feit dat je event handlers _niet_ zo moet doen)

  • MisterData
  • Registratie: September 2001
  • Laatst online: 27-11 20:42
De kans bestaat natuurlijk dat die event-interface ooit veranderd is ofzo. Zoek anders een extensie waarvan je zeker weet dat die deze functionaliteit gebruikt en ga eens in de broncode daarvan neuzen... dikke kans dat je de code daaruit dan regelrecht kunt copy-pasten naar je eigen ding :)

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

MisterData schreef op maandag 08 januari 2007 @ 21:36:
De kans bestaat natuurlijk dat die event-interface ooit veranderd is ofzo.
natuurlijk is die kans er, maar als je dat voorbeeldje probeerd dan zul je heel snel zien dat dat hier niet het geval is :)

Verwijderd

Topicstarter
Ik heb het als volgt aangepakt, een werkende extentie (genaamd hellow world) gemaakt. De xpi bestaat uit:


instal.js
instal.rdf
helloworld.jar

de jar bestaat uit de volgende onderdelen:( + en - geven aan welke bestanden waar in zitten _
content
+helloworld
- about.xul
- content.rdf
- helloworld.js
- helloworld.xul
skin
+classic
+helloworld
-content.rdf (en nog 2 png plaatjes)

helloworld.xul ziet er zo uit:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?xml version="1.0"?>

<overlay>
window.addEventListener("load", function() { myExtension.init(); }, false);

var myExtension = {
  init: function() {
    var appcontent = document.getElementById("appcontent");   // browser
    if(appcontent)
      appcontent.addEventListener("load", this.onPageLoad, true);
    var messagepane = document.getElementById("messagepane"); // mail
    if(messagepane)
      messagepane.addEventListener("load", this.onPageLoad, true);
  },

  onPageLoad: function(aEvent) {
    var doc = aEvent.originalTarget; // doc is document that triggered "onload" event

      alert("Pagina is veranderd");
  }
}

</overlay>


content.rdf:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?xml version="1.0"?>

<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:chrome="http://www.mozilla.org/rdf/chrome#">

    <RDF:Seq RDF:about="urn:mozilla:package:root">
        <RDF:li RDF:resource="urn:mozilla:package:helloworld"/>
    </RDF:Seq>

    <RDF:Seq RDF:about="urn:mozilla:overlays">
        <RDF:li RDF:resource="chrome://browser/content/browser.xul"/>
        <RDF:li RDF:resource="chrome://navigator/content/navigator.xul"/>
    </RDF:Seq>

    <RDF:Seq RDF:about="chrome://browser/content/browser.xul">
        <RDF:li>chrome://helloworld/content/helloworldOverlay.xul</RDF:li>
    </RDF:Seq>

    <RDF:Seq about="chrome://navigator/content/navigator.xul">
        <RDF:li>chrome://helloworld/content/helloworldOverlay.xul</RDF:li>
    </RDF:Seq>

    <RDF:Description RDF:about="urn:mozilla:package:helloworld"
        chrome:displayName="Hello, world! 0.1"
        chrome:author="Eric Hamiter"
        chrome:authorURL="mailto:ehamiter@gmail.com"
        chrome:name="helloworld"
        chrome:extension="true"
        chrome:description="Displays an alert message via url change">
    </RDF:Description>

</RDF:RDF>


naar mijn idee zou hij nu een alert moeten geven elke keer dat de pagina veranderd.
Volgens mij maak ik hier een denk fout en geen code fout maar ik zie niet welke:(
Pagina: 1