2011-02-25 9 views
10

Sto lavorando con un controllo ActiveX in Internet Explorer 8 che consente di visualizzare una finestra di dialogo di salvataggio del file che consente all'utente di scegliere un nome e un tipo di file (jpg, gif, ecc.). Questi valori vengono passati al codice e quindi vengono utilizzati in un metodo diverso per salvare il file. Sfortunatamente il metodo che richiama la finestra di dialogo non ha alcun valore di ritorno, e il nome del file e il tipo di file vengono passati come sui parametri.Utilizzo dei parametri "Out" in JavaScript

La firma del metodo (espresso in Visual Basic) si presenta così:

Public Sub SaveFileDialog(_ 
    ByVal bstrDialogType As Variant, _ 
    ByRef pbstrFileName As String, _ 
    ByRef out_pvType As Long _ 
) 

I due ByRef parametri sono gli fuori parametri.

Ho scritto il seguente codice JavaScript:

try 
{ 
    var saveFileName, saveFileType; // out variables 
    gxVideoPlayBack.SaveFileDialog("image", saveFileName, saveFileType); 
    alert(saveFileName); // displays "undefined" 
    alert(saveFileType); // displays "undefined" 
} 
catch(error) 
{ 
    if(!error.number === -2147221484) // User clicked cancel. 
    { 
     alert(error.message); 
    } 
} 

Il codice funziona in quanto il controllo ActiveX produce il suo dialogo, e io in grado di gestire le condizioni di errore, ma io non riesco a capire come acquisire i valori dei parametri out.

Nel codice gxVideoPlayBack è un riferimento al controllo ActiveX incorporato nel DOM tramite un elemento HTML.

Se JavaScript non funziona per questo, può essere fatto in VBScript?

In alternativa, posso solo implementare la mia finestra di dialogo, ma preferirei utilizzare quella fornita.

risposta

7

Edit: Sembra che non è possibile avere parametri "out" in JavaScript/JScript.

originale: Forse il approach described in this article funzionerà:

var saveFileName={}, saveFileType={}; // Empty "output" objects. 
gxVideoPlayBack.SaveFileDialog("image", saveFileName, saveFileType); 
alert(saveFileName.value); // The "value" attribute is assigned ... 
alert(saveFileType.value); // ... by the "SaveFileDialog" method? 

Suppongo che l'idea è che l'involucro WSH per il presente invito nativo tenterà di assegnare il "valore" di proprietà dei parametri di uscita dati, in questo modo è possibile sovrascrivere il valore setter o semplicemente assegnargli un oggetto con un valore setter incorporato.

+0

Ecco come XPConnect collega il gap tra ref e XPCOM, ma non ho idea se ActiveX faccia qualcosa di simile. –

+0

@lwburk: sì, lo stesso qui, solo buttando fuori un'idea. Penso che la realtà sia che i parametri "out" non sono disponibili in JScript/JavaScript. – maerics

+1

Concetto interessante. Sfortunatamente, quando inizializzo le due variabili su un oggetto vuoto, * SaveFileDialog * genera un'eccezione di tipo. Si aspetta una stringa e un intero. – RunnerRick

0

Sfortunatamente, i parametri out/ByRef funzionano solo in JScript per gli oggetti; non per nessun altro tipo (numeri, stringhe).

In questo caso, sarà necessario utilizzare VBScript, che supporta gli argomenti ByRef o like maerics says, scrivere un wrapper VB/VBScript per il metodo SaveFileDialog, che potrebbe restituire un oggetto contenente sia nome file che tipo.

1

Tutti argomenti della funzione in JavaScript sono passed by value (anche se il valoreviene passato è un riferimento ad un oggetto (che è)). Non esiste alcun riferimento per il pass-by.

Se SaveFileDialog modifica gli oggetti a cui fa riferimento saveFileName e saveFileType, è possibile accedere a tali modifiche tramite le variabili esistenti.

Problemi correlati