caricamento di una pagina di loading da overlay.js

16 views
Skip to first unread message

armando

unread,
Nov 30, 2009, 1:08:36 PM11/30/09
to XUL Italia - Public Discussions
Ciao, vorrei sapere se è possibile, visualizzare una pagina (o un msg)
durante la fase di caricamento e processamento di una pagina (tutto
questo dall'overlay);

in pratica ho creato un estensione per mozilla, la quale processa la
pagina caricata nel browser secondo certi settaggi...
praticamente dall'overlay.js vedo quando la pagina è stata caricata
nel browser dopodicchà chiamo la funzione che la riformatta...

quello che vorrei fare è coprire tutto questo tempo con una pagina
temporanea...

Luca Greco

unread,
Nov 30, 2009, 7:10:44 PM11/30/09
to xulit-...@googlegroups.com
2009/11/30 armando <armando....@gmail.com>:
> ...
> quello che vorrei fare è coprire tutto questo tempo con una pagina
> temporanea...

Al momento la soluzione che mi viene in mente è quella
utilizzata da "mozilla ubiquity" per sovrapporre la propria interfaccia
al browser:

1) Nell'overlay del browser un fragment xul del tipo:

<popupset id="mainPopupSet">
<panel id="transparent-msg-panel" class="msgPanel">
<div id="html-panel-content" xmlns="http://www.w3.org/1999/xhtml"

xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
YOUR HTML
</div>
</panel>
</popupset>

2) Da Javascript la visualizzi facendo qualcosa del tipo:

var anchor = document.getElementById("content").selectedBrowser;
document.getElementById("upperlayer-panel").openPopup(anchor,
"overlap", 0, 0, false, true);

(https://developer.mozilla.org/en/XUL:Method:openPopup)

Ci sarebbero altri dettagli da sistemare tipo dimensionamento,
prevenire la gestione di alcuni eventi che di default nasconderebbero
nuovamente il pannello... cosa fare quando si
cambia tab etc. etc.

Altra soluzione (che nel tuo caso sarebbe a portata di mano
dato che la tua estensione già manipola il css della pagina)
potrebbe essere quella di modificare temporaneamente la pagina
coprendone il contenuto con un div grande quanto la pagina
e con style "position: fixed" e uno z-index alto per posizionarlo
in maniera assoluta sopra il resto del contenuto.

(ci sono diversi esempi di giochetti del genere per inserire le
proprie funzionalità all'interno di una pagina... tipo la bookmarklet
di bit.ly e moltissime altre bookmarklet e script greasymonkey,
potresti prendere ispirazione da qualcuno di questi)

Altre idee?

--
rpl

armando

unread,
Dec 1, 2009, 8:10:32 AM12/1/09
to XUL Italia - Public Discussions
grazie Luca...
ho provato con l'opzione <popupset id="mainPopupSet"> che tu mi hai
suggerito...
e ho messo

var anchor = document.getElementById("content").selectedBrowser;
document.getElementById("upperlayer-panel").openPopup(anchor,
"overlap", 0, 0, false, true);

nel js, al load della pagina e tolgo il popup non appena ha finito
l'esecuzione della funzione che processa la pagina....
funziona benissimo solo al primo lancio di mozilla....dopodicchè se io
vado su un altro url o apro un altro pannello non la visualizza
più..anche se tutto il resto del codice che è insieme a quello della
visualizzazione del popup viene eseguito...
ho provato ad agganciarlo anche all'evento che intercetta il cambio
dell'url....in questo modo lo apre...solo che lo visualizza anche
all'apertura di un nuovo tab in cui non vi è caricata una pagina...

armando

unread,
Dec 1, 2009, 8:16:11 AM12/1/09
to XUL Italia - Public Discussions
in verità nel secondo approccio (evento cambio url) lo apre sempre
anche quando non c'è bisogno....
ho provato anche a richiamarlo come primo comando e ultimo(per
togliere il popup) nella funzione che processa la pagina...ma non
capisco perchè non va..

Luca Greco

unread,
Dec 1, 2009, 9:08:08 AM12/1/09
to xulit-...@googlegroups.com
Il problema è che la popup è globale mentre il tuo "messaggio di
loading" è legato
ad un particolare tab (e potrebbero esserci più messaggi di loading su
tab diversi)

Potresti nell'handler del load visualizzare la popup solo dopo aver
deciso di procedere
con la modifica della pagina, e segnare da qualche parte che quel tab
è in loading,
dopo di che con un handler su "TabSelected"
(https://developer.mozilla.org/En/Code_snippets/Tabbed_browser#Detecting_tab_selection)
decidi se visualizzare o meno la popup a seconda che il tab sia
o meno ancora in loading.

P.S. Ho l'impressione che facendo injection di HTML nel documento in loading
la soluzione potrebbe essere più semplice (la seconda soluzione).

--
rpl
Reply all
Reply to author
Forward
0 new messages