在JavaScript中使用"Out"参数

Run*_*ick 10 javascript internet-explorer activex

我正在使用Internet Explorer 8中的ActiveX控件来显示一个保存文件对话框,让用户选择文件名和文件类型(jpg,gif等).这些值传递给代码,然后以不同的方法用于保存文件.不幸的是,调用对话框的方法没有返回值,文件名和文件类型作为out参数传入.

方法的签名(用Visual Basic表示)如下所示:

Public Sub SaveFileDialog( _
   ByVal bstrDialogType As Variant, _
   ByRef pbstrFileName As String, _
   ByRef out_pvType As Long _
)
Run Code Online (Sandbox Code Playgroud)

两个ByRef参数是out参数.

我编写了以下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);
    }
}
Run Code Online (Sandbox Code Playgroud)

代码的工作原理是ActiveX控件生成它的对话框,我可以处理错误条件,但我似乎无法弄清楚如何捕获out参数的值.

在代码中,gxVideoPlayBack是通过HTML元素对DOM中嵌入的ActiveX控件的引用.

如果JavaScript不能用于此,可以在VBScript中完成吗?

作为替代方案,我可以实现自己的对话框,但宁可使用提供的对话框.

mae*_*ics 7

编辑:似乎在JavaScript/JScript中不可能有"out"参数.

原文: 也许本文中描述方法可行:

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?
Run Code Online (Sandbox Code Playgroud)

我想这个想法是这个本机调用的WSH包装器将尝试分配给定输出参数的"value"属性,因此你可以覆盖值setter或者只给它一个带有内置值setter的对象.