与“合作”;“出去”;JavaScript中的参数

与“合作”;“出去”;JavaScript中的参数,javascript,internet-explorer,activex,Javascript,Internet Explorer,Activex,我正在使用Internet Explorer 8中的ActiveX控件,该控件将显示一个“保存文件”对话框,让用户选择文件名和文件类型(jpg、gif等)。这些值被传递给代码,然后用另一种方法保存文件。不幸的是,调用对话框的方法没有返回值,文件名和文件类型作为输出参数传入 方法的签名(用Visual Basic表示)如下所示: Public Sub SaveFileDialog( _ ByVal bstrDialogType As Variant, _ ByRef pbstrFile

我正在使用Internet Explorer 8中的ActiveX控件,该控件将显示一个“保存文件”对话框,让用户选择文件名和文件类型(jpg、gif等)。这些值被传递给代码,然后用另一种方法保存文件。不幸的是,调用对话框的方法没有返回值,文件名和文件类型作为输出参数传入

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

Public Sub SaveFileDialog( _
   ByVal bstrDialogType As Variant, _
   ByRef pbstrFileName As String, _
   ByRef out_pvType As Long _
)
这两个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);
    }
}
代码的工作原理是ActiveX控件生成其对话框,我可以处理错误条件,但我似乎不知道如何捕获out参数的值。

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

如果JavaScript对此不起作用,可以在VBScript中完成吗


作为替代,我可以实现自己的对话框,但更愿意使用提供的对话框。

编辑:在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?

我假设这个本机调用的WSH包装器将尝试分配给定输出参数的“value”属性,因此您可以覆盖值设置器,或者只给它一个带有内置值设置器的对象。

不幸的是,out/ByRef参数只在JScript中对对象起作用;不适用于任何其他类型(数字、字符串)


在这种情况下,您必须使用支持ByRef参数的VBScript,或者为SaveFileDialog方法编写一个VB/VBScript包装器,该包装器可以返回一个包含文件名和类型的对象。

JavaScript中的所有函数参数都是(即使传递的值是对对象的引用(实际上是这样))。没有通过引用的方法


如果
SaveFileDialog
修改了
saveFileName
saveFileType
引用的对象,那么您就可以通过现有变量访问这些更改。

这就是XPConnect如何在JavaScript和XPCOM之间架起一座ref鸿沟的桥梁,但我不知道ActiveX是否也有类似的功能。@lwburk:是的,这里也一样,只是抛出一个想法。我认为现实情况是,在JScript/JavaScript.com这个有趣的概念中,“out”参数是不可用的。不幸的是,当我将这两个变量初始化为空对象时,SaveFileDialog抛出一个类型异常。我的结论是,不可能从JavaScript中利用ActiveX方法中的“out”参数,但这是最好的答案。