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代碼:

/* 通過擴展名,檢驗文件格式。
 *@param filePath{string} 文件路徑
 *@param 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/library/7sw4ddf8(v=vs.94).aspx

JS、ActiveXObject、Scripting.FileSystemObject:http://www.cnblogs.com/dingjiaoyang/p/5831056.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM