避免使用ActiveX来保存文件

时间:2015-03-04 14:13:04

标签: javascript security internet-explorer activex

有一个函数从表中返回一个数组:

 GetFilteredData: function()
    /*====================================================
        - returns an array containing filtered data:
        [rowindex,[value1,value2,value3...]]
    =====================================================*/
    {
        var row = this.tbl.rows;
        var filteredData = [];
        for(var i=0; i<this.validRowsIndex.length; i++)
        {
            var rowData, cellData;
            rowData = [this.validRowsIndex[i],[]];
            var cells = tf_Tag(row[this.validRowsIndex[i]],'td');
            for(var j=0; j<cells.length; j++)
            {
                var cell_data = tf_GetNodeText(cells[j]);
                rowData[1].push( cell_data );
            }
            filteredData.push(rowData);
        }
        return filteredData;
    },


我使用此代码将数据转换为CSV并将其直接保存到桌面:

<script language="JavaScript">
function WriteToFile() 
{
   var fso, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   s = fso.OpenTextFile("exported.csv" , 2, 1, -2);
   var colvals = tf_table1.GetFilteredData(true);
   for (i=0; i<colvals.length; i++){
     s.write(colvals[i] + '\r\n');
 }
   s.Close();
}


它工作正常,但IE安全设置需要设置为最小(Internet选项 - &gt;安全)。有没有办法重写这段代码,以便它们可以在中(默认)设置上工作?
谢谢!

1 个答案:

答案 0 :(得分:1)

为什么这需要提升权限?

JavaScript无法直接访问文件系统。您正在使用的ActiveXObject允许JS执行此操作。这很有道理,对吗?我们不希望网站对我们的文件系统具有写入权限,因为恶意用户可能会破坏数据或将恶意程序放在我们的计算机上。它来自地狱drive-by download 。只有最受信任的网站才能拥有这种访问权限(可以说,任何网站都不应该这样做)。

我如何解决这个问题?

我认为您最好的办法是创建过滤后的CSV服务器端,并允许用户直接从您的服务器下载。如果用户应该将其放在特定的位置,您可以在下载之前编写他们阅读的说明。 (也许http://ux.stackexchange.com可以建议采用很好的方式)