避免的ActiveX保存文件(avoid ActiveX to save a file)

2019-10-22 04:19发布

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

 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选项 - >安全)。 有什么办法来改写这个代码,以便他们将在中(默认)设置工作?
谢谢!

Answer 1:

为什么这需要更高的权限?

JavaScript不能直接本机访问文件系统。 该ActiveXObject你正在使用允许JS做到这一点。 这是有道理的,对吗? 我们不希望一个网站,以对我们的文件系统的写访问,因为恶意用户可能会破坏数据或把恶意程序我们的电脑上。 这将会是一个偷渡式下载从地狱。 只有最信任的站点应该有那种访问(可以说,没有网站应该做类似事情)。

如何解决这个问题?

我想为你做的最好的事情就是创建一个过滤CSV服务器端,并允许用户直接从服务器上下载。 如果用户应该把它放在特定的,你可以写,他们在下载前仔细阅读说明书。 (也许http://ux.stackexchange.com可以建议这样做的一个很好的方法)



文章来源: avoid ActiveX to save a file