JS进阶篇--IE浏览器的ActiveXObject对象以及FileSystemobject的运用扩大

ActiveXObject 对象

启用和返回对自动化对象的援用。
此对象仅用于实例化自动化对象,且此对象没有成员。

正告:此对象为 Microsoft 扩大,仅在 Internet Explorer 中受支撑,在 Windows 8.x 运用市肆运用中不受支撑。

语法:

newObj = new ActiveXObject(servername.typename[, location])

参数:
newObj:必选。ActiveXObject 分配到的变量称号。
servername:必选。供应对象的运用顺序的称号。
typename:必选。要竖立的对象的范例或类。
location:可选。要在个中竖立对象的网络服务器的称号。

备注
自动化服务器最少供应一种对象。 比方,字处理运用顺序能够会供应运用顺序对象、文档对象和工具栏对象。

你能够在 HKEY_CLASSES_ROOT 注册表项中标识宿主 PC 上的 servername.typename 值。 比方,下面是可在此处找到的几个值示例,详细取决于装置的顺序:

  1. Excel.Application
  2. Excel.Chart
  3. Scripting.FileSystemObject
  4. WScript.Shell
  5. Word.Document

注重:ActiveX 对象能够存在平安问题。 若要运用 ActiveXObject,你能够须要在相干平安地区的 Internet Explorer 中调解平安设置。 比方,关于当地 Intranet 地区,平常须要将自定义设置更改成“对没有标记为平安的 ActiveX 控件举行初始化和剧本运转”。

若要竖立自动化对象,请将新的 ActiveXObject 分配给对象变量:

var ExcelApp = new ActiveXObject("Excel.Application");
var ExcelSheet = new ActiveXObject("Excel.Sheet"); 

此代码启动竖立对象的运用顺序(在此示例中,为 Microsoft Excel 事情表)。 在竖立某个对象后,可在代码中运用已定义的对象变量援用该对象。 鄙人面的示例中,运用对象变量 ExcelSheet 和其他 Excel 对象(包含运用顺序对象和 ActiveSheet.Cells 鸠合)来接见新对象的属性和要领。

// Make Excel visible through the Application object.
ExcelSheet.Application.Visible = true;
// Place some text in the first cell of the sheet.
ExcelSheet.ActiveSheet.Cells(1,1).Value = "This is column A, row 1";
// Save the sheet.
ExcelSheet.SaveAs("C:\\TEST.XLS");
// Close Excel with the Quit method on the Application object.
ExcelSheet.Application.Quit();

请求
在以下文档形式中受支撑:Quirks、Internet Explorer 6 规范、Internet Explorer 7 规范、Internet Explorer 8 规范、Internet Explorer 9 规范、Internet Explorer 10 规范和 Internet Explorer 11 规范。 在 Windows 8.x 运用市肆运用中不受支撑。

FileSystemObject 对象

在IE浏览器中完成文件的操纵功用,还得须要FileSystemobject对象。
运用FileSystemObject 对象举行编程很简单,平常要经由以下的步骤: 竖立FileSystemObject对象、运用相干要领、接见对象相干属性 。

竖立FileSystemObject对象

var fso = new ActiveXObject("Scripting.FileSystemObject");  

上述代码实行后,fso就成为一个FileSystemObject对象实例。

运用相干要领

竖立对象实例后,就可以够运用对象的相干要领了。比方,运用CreateTextFile要领竖立一个文本文件:

var fso = new ActiveXObject("Scripting.FileSystemObject");  
var f1 = fso.createtextfile("c:\myjstest.txt",true");  

接见对象相干属性

要接见对象的相干属性,首先要竖立指向对象的句柄,这就要经由过程get系列要领完成:GetDrive担任猎取驱动器信息,GetFolder担任猎取文件夹信息,GetFile担任猎取文件信息。比方,指向下面的代码后,f1就成为指向文件c: est.txt的句柄:

var fso = new ActiveXObject("Scripting.FileSystemObject");  
var f1 = fso.GetFile("c:\myjstest.txt");  

然后,运用f1接见对象的相干属性。比方:

var fso = new ActiveXObject("Scripting.FileSystemObject");  
var f1 = fso.GetFile("c:\myjstest.txt");  
alert("File last modified: " + f1.DateLastModified); 

但有一点请注重:关于运用create要领竖立的对象,就没必要再运用get要领猎取对象句柄了,这时候直接运用create要领竖立的句柄称号就可以够:

var fso = new ActiveXObject("Scripting.FileSystemObject");  
var f1 = fso.createtextfile("c:\myjstest.txt",true");  
alert("File last modified: " + f1.DateLastModified);  

实例

1.猎取上传文件的大小

html代码:

<input type="file" id="filePath" onchange="getFileSize(this)"/>

js代码:

//兼容IE9低版本猎取文件的大小
function getFileSize(obj){
    var filesize;
    if(obj.files){
        filesize = obj.files[0].size;
    }else{
        try{
            var path,fso; 
            path = document.getElementById('filePath').value;
            fso = new ActiveXObject("Scripting.FileSystemObject"); 
            filesize = fso.GetFile(path).size; 
        }
        catch(e){
            //在IE9及低版本浏览器,假如不容许ActiveX控件与页面交互,点击了否,就没法猎取size
            console.log(e.message); //Automation 服务器不能竖立对象
            filesize = 'error'; //没法猎取
        }
    }
    return filesize;
}

2.限定上传文件的范例

假如是高版本浏览器,平常在HTML代码中写就可以完成,如:

<input type="file" name="filePath" accept=".jpg,.jpeg,.doc,.docxs,.pdf">

假如限定上传文件为图片范例,以下:

<input type="file" class="file" value="上传" accept="image/*"/>

但是在别的低版本浏览器就不管用了,须要js来推断。
html代码:

<input type="file" id="filePath" onchange="limitTypes()"/>

js代码:

/* 经由过程扩大名,磨练文件花样。
 *@parma filePath{string} 文件途径
 *@parma acceptFormat{Array} 许可的文件范例
 *@result 返回值{Boolen}:true or false
 */
function checkFormat(filePath,acceptFormat){
    var resultBool= false,
        ex = filePath.substring(filePath.lastIndexOf('.') + 1);
        ex = ex.toLowerCase();
    for(var i = 0; i < acceptFormat.length; i++){
      if(acceptFormat[i] == ex){
            resultBool = true;
            break;
      }
    }
    return resultBool;
};
        
function limitTypes(){
    var obj = document.getElementById('filePath');
    var path = obj.value;
    var result = checkFormat(path,['bmp','jpg','jpeg','png']);
    if(!result){
        alert('上传范例毛病,请从新上传');
        obj.value = '';
    }
}

注:固然这个实例2在这儿没有用到上面的学问,只是依据实例1遐想到了。

参考

ActiveXObject 对象 (JavaScript):https://msdn.microsoft.com/li…

JS、ActiveXObject、Scripting.FileSystemObject :http://www.cnblogs.com/dingji…

    原文作者:风雨后见彩虹
    原文地址: https://segmentfault.com/a/1190000010370279
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞