Definizione di interfacce simili a browser per il contenuto HTMLAdobe AIR 1.0 e versioni successive JavaScript include diverse API per il controllo della finestra in cui è visualizzato il contenuto HTML. In AIR, queste API possono essere ignorate mediante l'implementazione di una classe HTMLHost personalizzata. Informazioni sull'estensione della classe HTMLHostSe, ad esempio, la vostra applicazione presenta più oggetti HTMLLoader in un'interfaccia a schede, può essere utile che le modifiche apportate dalle pagine HTML caricate si riflettano nella modifica dell'etichetta della scheda, anziché del titolo della finestra principale. In modo analogo, il codice potrebbe rispondere a una chiamata a window.moveTo() riposizionando l'oggetto HTMLLoader nel relativo contenitore di oggetti di visualizzazione principale, spostando la finestra che contiene l'oggetto HTMLLoader, non eseguendo alcuna operazione o effettuando una qualsiasi altra operazione. La classe AIR HTMLHost controlla i seguenti metodi e proprietà JavaScript:
Quando create un oggetto HTMLLoader usando new HTMLLoader(), i metodi o le proprietà JavaScript non vengono abilitati. La classe HTMLHost fornisce un'implementazione predefinita simile a un browser di queste API JavaScript. Potete anche estendere la classe HTMLHost per personalizzare il comportamento. Per creare un oggetto HTMLHost che supporta il comportamento predefinito, impostate il parametro defaultBehaviors su true nella funzione di costruzione HTMLHost: var defaultHost:HTMLHost = new HTMLHost(true); Quando create una finestra HTML in AIR con il metodo createRootWindow() della classe HTMLLoader, viene assegnata automaticamente un'istanza HTMLHost che supporta i comportamenti predefiniti. Potete modificare il comportamento dell'oggetto host assegnando una diversa implementazione di HTMLHost alla proprietà htmlHost di HTMLLoader, oppure potete assegnare null per disabilitare completamente le funzioni. Nota: AIR assegna un oggetto HTMLHost predefinito alla finestra iniziale creata per un'applicazione AIR basata su HTML e a qualsiasi finestra creata dall'implementazione predefinita del metodo JavaScript window.open().
Esempio: estensione della classe HTMLHostIl seguente esempio mostra come personalizzare il modo in cui un oggetto HTMLLoader ha effetto sull'interfaccia utente, mediante l'estensione della classe HTMLHost: Esempio Flex:
Per verificare il codice qui descritto, includete un file HTML con il seguente contenuto nella directory dell'applicazione: <html>
<head>
<title>Test</title>
</head>
<script>
function openWindow()
{
window.runtime.trace("in");
document.title = "foo"
window.open('Test.html');
window.runtime.trace("out");
}
</script>
<body>
<a href="#" onclick="openWindow()">window.open('Test.html')</a>
</body>
</html>
Esempio Flash Professional:
Gestione delle modifiche alla proprietà window.locationSostituite il metodo locationChange() per gestire le modifiche dell'URL della pagina HTML. Il metodo locationChange() viene chiamato quando il codice JavaScript in una pagina modifica il valore di window.location. Il seguente esempio carica semplicemente l'URL richiesto: override public function updateLocation(locationURL:String):void
{
htmlLoader.load(new URLRequest(locationURL));
}
Nota: potete usare la proprietà htmlLoader dell'oggetto HTMLHost per fare riferimento all'oggetto HTMLLoader corrente.
Gestione delle chiamate JavaScript a window.moveBy(), window.moveTo(), window.resizeTo(), window.resizeBy()Sostituite il metodo set windowRect() per gestire le modifiche nei limiti del contenuto HTML. Il metodo set windowRect() viene chiamato quando il codice JavaScript in una pagina chiama window.moveBy(), window.moveTo(), window.resizeTo() o window.resizeBy(). Il seguente esempio aggiorna semplicemente i limiti della finestra del desktop: override public function set windowRect(value:Rectangle):void
{
htmlLoader.stage.nativeWindow.bounds = value;
}
Gestione delle chiamate JavaScript a window.open()Sostituite il metodo createWindow() per gestire le chiamate JavaScript a window.open(). Le implementazioni del metodo createWindow() hanno il compito di creare e restituire un nuovo oggetto HTMLLoader. In genere, l'oggetto HTMLLoader viene visualizzato in una nuova finestra, tuttavia non è obbligatorio creare una nuova finestra. L'esempio seguente illustra come implementare la funzione createWindow() usando HTMLLoader.createRootWindow() per creare sia la finestra che l'oggetto HTMLLoader. Potete anche creare separatamente un oggetto NativeWindow e aggiungere HTMLLoader allo stage della finestra. override public function createWindow(windowCreateOptions:HTMLWindowCreateOptions):HTMLLoader{
var initOptions:NativeWindowInitOptions = new NativeWindowInitOptions();
var bounds:Rectangle = new Rectangle(windowCreateOptions.x, windowCreateOptions.y,
windowCreateOptions.width, windowCreateOptions.height);
var htmlControl:HTMLLoader = HTMLLoader.createRootWindow(true, initOptions,
windowCreateOptions.scrollBarsVisible, bounds);
htmlControl.htmlHost = new HTMLHostImplementation();
if(windowCreateOptions.fullscreen){
htmlControl.stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE;
}
return htmlControl;
}
Nota: questo esempio assegna l'implementazione personalizzata di HTMLHost a tutte le nuove finestre create con window.open(). Potete anche usare un'implementazione diversa o impostare la proprietà htmlHost su null per le nuove finestre, se necessario.
L'oggetto passato come parametro al metodo createWindow() è un oggetto HTMLWindowCreateOptions. La classe HTMLWindowCreateOptions include delle proprietà che riportano i valori impostati nella stringa del parametro features nella chiamata a window.open():
La classe HTMLLoader non implementa tutte le funzioni che possono essere specificate nella stringa delle funzioni. La vostra applicazione deve contenere le barre di scorrimento, dell'indirizzo, dei menu, di stato e degli strumenti appropriate. Gli altri argomenti del metodo JavaScript window.open() sono gestiti dal sistema. Un'implementazione di createWindow() non deve caricare contenuto nell'oggetto HTMLLoader o impostare il titolo della finestra. Chiamate Handling JavaScript a window.close()Sostituite windowClose() per gestire le chiamate JavaScript al metodo window.close(). Il seguente esempio chiude la finestra del desktop quando viene chiamato il metodo window.close(): override public function windowClose():void
{
htmlLoader.stage.nativeWindow.close();
}
Le chiamate JavaScript a window.close() non devono chiudere la finestra contenitore. Potete, ad esempio, rimuovere HTMLLoader dall'elenco di visualizzazione, lasciando aperta la finestra (che può avere altro contenuto), come nel codice seguente: override public function windowClose():void
{
htmlLoader.parent.removeChild(htmlLoader);
}
Gestione delle modifiche alla proprietà window.statusSostituite il metodo updateStatus() per gestire le modifiche JavaScript al valore di window.status. Il seguente esempio traccia il valore dello stato: override public function updateStatus(status:String):void
{
trace(status);
}
Lo stato richiesto viene passato come stringa al metodo updateStatus(). L'oggetto HTMLLoader non fornisce una barra di stato. Gestione delle modifiche alla proprietà window.document.titleSostituite il metodo updateTitle() per gestire le modifiche JavaScript al valore di window.document.title. Il seguente esempio modifica il titolo della finestra e aggiunge la stringa "Sample" al titolo: override public function updateTitle(title:String):void
{
htmlLoader.stage.nativeWindow.title = title + " - Sample";
}
Quando document.title è impostata su una pagina HTML, il titolo richiesto viene passato come stringa al metodo updateTitle(). Le modifiche a document.title non devono modificare il titolo della finestra che contiene l'oggetto HTMLLoader. Potreste, ad esempio, modificare un altro elemento dell'interfaccia, ad esempio un campo di testo. Gestione delle chiamate JavaScript a window.blur() e window.focus()Sostituite i metodi windowBlur() e windowFocus() in modo da gestire le chiamate JavaScript a window.blur() e window.focus(), come illustrato nel seguente esempio: override public function windowBlur():void
{
htmlLoader.alpha = 0.5;
}
override public function windowFocus():void
{
htmlLoader.alpha = 1.0;
NativeApplication.nativeApplication.activate(htmlLoader.stage.nativeWindow);
}
Nota: AIR non fornisce un'API per la disattivazione di una finestra o un'applicazione.
Creazione di finestra con contenuto HTML scorrevoleLa classe HTMLLoader include un metodo statico, HTMLLoader.createRootWindow(), che consente di aprire una nuova finestra (rappresentata da un oggetto NativeWindow) che contiene un oggetto HTMLLoader e definisce alcune impostazioni dell'interfaccia utente per quella finestra. Il metodo accetta quattro parametri, che consentono di definire l'interfaccia utente:
Il seguente codice, ad esempio, utilizza il metodo HTMLLoader.createRootWindow() per creare una finestra con contenuto HTMLLoader che utilizza barre di scorrimento: var initOptions:NativeWindowInitOptions = new NativeWindowInitOptions();
var bounds:Rectangle = new Rectangle(10, 10, 600, 400);
var html2:HTMLLoader = HTMLLoader.createRootWindow(true, initOptions, true, bounds);
var urlReq2:URLRequest = new URLRequest("http://www.example.com");
html2.load(urlReq2);
html2.stage.nativeWindow.activate();
Nota: le finestre create mediante una chiamata a createRootWindow() direttamente in JavaScript rimangono indipendenti dalla finestra HTML che viene aperta. Le proprietà JavaScript Window opener e parent, ad esempio, sono null. Tuttavia, se chiamate createRootWindow() indirettamente mediante la sostituzione del metodo createWindow() di HTMLHost per chiamare createRootWindow(), le proprietà opener e parent fanno riferimento alla finestra HTML che viene aperta.
|
|