关于JS的一个问题,请高手指教啊

时间:2022-08-24 19:43:34
我在JS文件中写了 一个 var adoStream = new ActiveXObject("Scripting.FileSystemObject"); 但是在页面中,总是用不了呢?总是提示:Automation服务器不能创建对象,试过好多网上写的方法都不行,包括启动什么服务等,都解决不了,请高手指教啊,在线等提示!谢谢各位了!!!

14 个解决方案

#1


Scripting.FileSystemObject在网页中太不安全了,所以你必须将浏览器安全性降到最低。并且只有IE支持。其他浏览器不支持。
所以,在网页中使用Scripting.FileSystemObject,没有一个人会去访问你的网站

#2


对文件操作还是不要用JS对象

#3


FSO 确实是再网页中不太安全,而且没当你运行脚本时,都会提示一个 ActiveX 安全脚本运行的提示。创建 FSO 不紧要降浏览器的安全性降低,而且还要设定浏览器的 “跨域访问权限” ,只有设置这个权限才能创建出 FSO 对象。

给你一个我创建 FSO 的程序片段:
这就是一个使用 FSO 静态完成用户留言,使用 FSO 将用户的留言存储到 XML 文档中.里面涉及到 FSO 的一些对文件的操作和 JS DOM 的操作。

<script language="javascript">
function check(){

if(document.getElementById("name").value == "")
{
alert("昵称不允许为空!");
document.getElementById("name").focus();
return false;
}
else if(form1.content.value ==""){
alert("留言内容不允许为空!");
form1.content.focus();
return false;
}
else
{
    // 当内容都不为空时,则向 XML 中插入游客留言的信息
fso = new ActiveXObject("Scripting.FileSystemObject"); 

var IsExists = getFile("c:\\leaveWordInfo.xml");
if(IsExists == "not exists")
{
    // 如果不存在该文件,则创建该文件,并向该文件中写入一个 info 信息
var f1 = fso.createtextfile("c:\\leaveWordInfo.xml",true); 

var str = "";   
str = "<?xml version='1.0' encoding='GB2312'?>";
f1.writeLine(str);

str = "<leaveWordInfo>";
f1.writeLine(str);

str = "<info>";
f1.writeLine(str);

str = "<Id>L1</Id>";
f1.writeLine(str);

str = "<name>"+document.getElementById("name").value+"</name>";
f1.writeLine(str);

// 获得该游客的性别
    var sex = document.form1.sex;
var sex_value ="";
for(var i = 0 ; i< sex.length ; i++){
if(sex[i].checked){
sex_value = document.form1.sex[i].value;
}
}

str = "<sex>"+sex_value+"</sex>";
f1.writeLine(str);

// 获得该游客的表情
    var brow = document.form1.emote;
var brow_value ="";
for(var i = 0 ; i< brow.length ; i++){
if(brow[i].checked){
brow_value = document.form1.emote[i].value;
}
}

str = "<brow>"+brow_value+"</brow>";
f1.writeLine(str);

// 获得当前时间
var date = new Date();
var year = date.getYear();
var month = date.getMonth()+1;
var day = date.getDate();
var hour = date.getHours();
var Mintes = date.getMinutes();
var seconds = date.getSeconds();
str = "<date>"+(year+"-"+month+"-"+day+" "+hour+":"+Mintes+":"+seconds)+"</date>";
f1.writeLine(str);

str = "<content>"+form1.content.value+"</content>";
f1.writeLine(str);

str = "</info>";
f1.writeLine(str);

str = "</leaveWordInfo>";
f1.writeLine(str);
f1.Close();

}
else if(IsExists == "exists"){
var ts = fso.OpenTextFile("c:\\leaveWordInfo.xml", 1);  // 创建只读的 fso 对象:1 --> 只读 ; 2 --> 只写

var Rowcounts = 0 ; //记录该文件的总行数以初始化数组。

var line = ts.ReadLine();

while(!ts.AtEndOfStream){ 
Rowcounts++;
line = ts.ReadLine();
}
Rowcounts += 1;

//  定义数组用来存储从 XML 中读取出来的值, Rowcounts --> XML 文档的总行数; 8 --> 要添加新留言的行数
array = new Array(Rowcounts);  

// 至此 , 已全部将 XML 文档中的内容读出并存入到数组中储存
var ts = fso.OpenTextFile("c:\\leaveWordInfo.xml", 1);  // 创建只读的 fso 对象:1 --> 只读 ; 2 --> 只写
var str = ts.ReadLine();

for(var i =0 ;; i++)
{
array[i] = str;
if(i == Rowcounts-1){
ts.Close();
break;
}
str = ts.ReadLine();
}

// 将新留言重新写入至 XML 文档中
    // 如果不存在该文件,则创建该文件,并向该文件中写入一个 info 信息
var f1 = fso.createtextfile("c:\\leaveWordInfo.xml",true); 

var str = "";   
str = "<?xml version='1.0' encoding='GB2312'?>";
f1.writeLine(str);

str = "<leaveWordInfo>";
f1.writeLine(str);

// 重新往 XML 中写入旧留言
for(var i =2; i< array.length-1 ; i++){
var str2 = array[i] .toString();
f1.writeLine(str2);
}

// 添加新留言
str = "<info>";
f1.writeLine(str);

// 获得上一留言的 ID ,以此来设置新留言的 ID
var PreId = array[array.length -8].toString().substring(5,7);

str = "<Id>L"+(parseInt(PreId)+1)+"</Id>";
f1.writeLine(str);

str = "<name>"+document.getElementById("name").value+"</name>";
f1.writeLine(str);

// 获得该游客的性别
    var sex = document.form1.sex;
var sex_value ="";
for(var i = 0 ; i< sex.length ; i++){
if(sex[i].checked){
sex_value = document.form1.sex[i].value;
}
}

str = "<sex>"+sex_value+"</sex>";
f1.writeLine(str);

// 获得该游客的表情
    var brow = document.form1.emote;
var brow_value ="";
for(var i = 0 ; i< brow.length ; i++){
if(brow[i].checked){
brow_value = document.form1.emote[i].value;
}
}

str = "<brow>"+brow_value+"</brow>";
f1.writeLine(str);

// 获得当前时间
var date = new Date();
var year = date.getYear();
var month = date.getMonth()+1;
var day = date.getDate();
var hour = date.getHours();
var Mintes = date.getMinutes();
var seconds = date.getSeconds();
str = "<date>"+(year+"-"+month+"-"+day+" "+hour+":"+Mintes+":"+seconds)+"</date>";
f1.writeLine(str);

str = "<content>"+form1.content.value+"</content>";
f1.writeLine(str);

str = "</info>";
f1.writeLine(str);

str = "</leaveWordInfo>";
f1.writeLine(str);
f1.Close();
}

alert("留言成功!");
// location.href="../default.html";
return true;
}
}

  // 此方法判断该 XML 是否存在
  function getFile(filename)   
  {   
     if(!fso.FileExists(filename)){   
  // 不存在该文件
return "not exists";
     }   
 else
 {
return "exists";
 }  
  }   
</script>



最后给出一个 FSO 的属性大全,这些东西网上有很多,如果你需要上 Google 一搜便是。

FSO属性,目录和文件同

AtEndOfLine 属性 
如果文件指针恰好定位在 TextStream 文件中行尾标记的前面,则返回 True;如果没有,则返回 False。 
AtEndOfStream 属性 
如果文件指针位于 TextStream 文件的末尾,则返回 True;如果不是,则返回 False。 
Attributes 属性 
设置或返回文件或文件夹的属性。 
AvailableSpace 属性 
返回指定的驱动器或网络共享上,可供用户使用的空间大小。 
Column 属性 
返回 TextStream 文件中当前字符位置的列号。 
CompareMode 属性 
设置并返回比较模式,用于比较 Dictionary 对象中的字符串关键字。 
Count 属性 
返回集合或 Dictionary 对象中的项目数。 
DateCreated 属性 
返回指定的文件或文件夹的创建日期和时间。只读。 
DateLastAccessed 属性 
返回指定的文件或文件夹上一次被访问的日期和时间。 
DateLastModified 属性 
返回指定的文件或文件夹上一次被修改的日期和时间。 
Drive 属性 
返回指定的文件或文件夹所在驱动器的盘符。 
DriveLetter 属性 
返回本地物理驱动器或网络共享的盘符。 
Drives 属性 
返回一个 Drives 集合,该集合包含本地计算机上所有可用的 Drive 对象。 
DriveType 属性 
返回一个值,表明指定的驱动器的类型。 
Files 属性 
返回一个 Files 集合,该集合包含指定的文件夹中包含的全部 File 对象,包括那些设为隐藏和系统文件属性的对象。 
FileSystem 属性 
返回指定的驱动器所用的文件系统的类型。 
FreeSpace 属性 
返回指定的驱动器或网络共享上,可供用户使用的空间大小。 
IsReady 属性 
如果指定的驱动器准备就绪,则返回 True;如果没有,则返回 False。 
IsRootFolder 属性 
如果指定的文件夹是根文件夹,则返回 True;如果不是,则返回 False。 
Item 属性 
对于 Dictionary 对象中指定的关键字,设置或返回与之相对应的项目。对于集合,则根据指定的关键字返回一个项目。 
Key 属性 
设置 Dictionary 对象中的关键字。 
Line 属性 
返回 TextStream 文件中的当前行号。 
Name 属性 
设置或返回指定的文件或文件夹的名称。 
ParentFolder 属性 
返回指定文件或文件夹的上一级的文件夹对象。 
Path 属性 
返回指定文件、文件夹或驱动器的路径。 
RootFolder 属性 
返回一个 Folder 对象,代表指定驱动器的根文件夹。 
SerialNumber 属性 
返回十进制序列号,用于唯一地标识磁盘卷。 
ShareName 属性 
返回指定驱动器的网络共享名。 
ShortName 属性 
返回要求早期 8.3 命名规范的程序使用的短名称。 
ShortPath 属性 
返回要求早期 8.3 命名规范的程序使用的短路径。 
Size 属性 
对于文件,返回指定的文件的大小,以字节为单位。对于文件夹,返回文件夹所包含的所有文件和子文件夹的大小,以字节为单位。 
SubFolders 属性 
返回一个 Folders 集合,包含指定文件夹中的所有文件夹,包括那些设为隐藏和系统文件属性的文件夹。 
TotalSize 属性 
返回驱动器或网络共享的总空间,以字节为单位。 
Type 属性 
返回有关文件或文件夹类型的信息。 
VolumeName 属性 
设置或返回指定驱动器的卷名。 
方法或者属性 描述 
BuildPath() 生成一个文件路径 
CopyFile() 复制文件 
CopyFolder() 复制目录 
CreateFolder() 创建新目录 
CreateTextFile() 生成一个文件 
DeleteFile() 删除一个文件 
DeleteFolder() 删除一个目录 
DriveExists() 检验盘符是否存在 
Drives 返回盘符的集合 
FileExists() 检验文件是否存在 
FolderExists 检验一个目录是否存在 
GetAbsolutePathName() 取得一个文件的绝对路径 
GetBaseName() 取得文件名 
GetDrive() 取得盘符名 
GetDriveName() 取得盘符名 
GetExtensionName() 取得文件的后缀 
GetFile() 生成文件对象 
GetFileName() 取得文件名 
GetFolder() 取得目录对象 
GetParentFolderName 取得文件或目录的父目录名 
GetSpecialFolder() 取得特殊的目录名 
GetTempName() 生成一个临时文件对象 
MoveFile() 移动文件 
MoveFolder() 移动目录 
OpenTextFile() 打开一个文件流 

#4


楼上的不错啊,可惜不用这个,收藏先

#5


引用 2 楼 mcm_guy 的回复:
对文件操作还是不要用JS对象

赞成。

#6


虽然不用,也要收藏一下

#7


引用 4 楼 mcm_guy 的回复:
楼上的不错啊,可惜不用这个,收藏先

#8


嗯,谢谢各位了啊,但是我的关键是创建不了 这个,服务器无法创建var adoStream = new ActiveXObject("Scripting.FileSystemObject"); ,如果是要将IE的权限设置为最低,我也试过了,但是还是不行啊,不知道为什么啊

#9


加为可信任站点,设置可信任站点的安全性里面,允许所有的activex,
另外,客户端的文件夹内根本无法知道,你怎么能去操作客户端的文件呢

#10


添加信任站点,也做了,IE基本上设置是最低的权限了,但是还是不行,

#11


所以啊,这种方法一般都是行不通的。
你还不如直接做个客户端的程序,单独处理上传文件。类似ftp,直接安装到客户端

#12


不是说了吗?
 光是设定 IE 浏览器安全性低是不够的 ,还要设置 IE 浏览器 “跨域访问权限” ,因为 FSO 是使用客户端的代码来范围客户端的文件,所以一定要有个跨域访问权限。

#13


引用 6 楼 zhj92lxs 的回复:
虽然不用,也要收藏一下

#14


留个脚印

#1


Scripting.FileSystemObject在网页中太不安全了,所以你必须将浏览器安全性降到最低。并且只有IE支持。其他浏览器不支持。
所以,在网页中使用Scripting.FileSystemObject,没有一个人会去访问你的网站

#2


对文件操作还是不要用JS对象

#3


FSO 确实是再网页中不太安全,而且没当你运行脚本时,都会提示一个 ActiveX 安全脚本运行的提示。创建 FSO 不紧要降浏览器的安全性降低,而且还要设定浏览器的 “跨域访问权限” ,只有设置这个权限才能创建出 FSO 对象。

给你一个我创建 FSO 的程序片段:
这就是一个使用 FSO 静态完成用户留言,使用 FSO 将用户的留言存储到 XML 文档中.里面涉及到 FSO 的一些对文件的操作和 JS DOM 的操作。

<script language="javascript">
function check(){

if(document.getElementById("name").value == "")
{
alert("昵称不允许为空!");
document.getElementById("name").focus();
return false;
}
else if(form1.content.value ==""){
alert("留言内容不允许为空!");
form1.content.focus();
return false;
}
else
{
    // 当内容都不为空时,则向 XML 中插入游客留言的信息
fso = new ActiveXObject("Scripting.FileSystemObject"); 

var IsExists = getFile("c:\\leaveWordInfo.xml");
if(IsExists == "not exists")
{
    // 如果不存在该文件,则创建该文件,并向该文件中写入一个 info 信息
var f1 = fso.createtextfile("c:\\leaveWordInfo.xml",true); 

var str = "";   
str = "<?xml version='1.0' encoding='GB2312'?>";
f1.writeLine(str);

str = "<leaveWordInfo>";
f1.writeLine(str);

str = "<info>";
f1.writeLine(str);

str = "<Id>L1</Id>";
f1.writeLine(str);

str = "<name>"+document.getElementById("name").value+"</name>";
f1.writeLine(str);

// 获得该游客的性别
    var sex = document.form1.sex;
var sex_value ="";
for(var i = 0 ; i< sex.length ; i++){
if(sex[i].checked){
sex_value = document.form1.sex[i].value;
}
}

str = "<sex>"+sex_value+"</sex>";
f1.writeLine(str);

// 获得该游客的表情
    var brow = document.form1.emote;
var brow_value ="";
for(var i = 0 ; i< brow.length ; i++){
if(brow[i].checked){
brow_value = document.form1.emote[i].value;
}
}

str = "<brow>"+brow_value+"</brow>";
f1.writeLine(str);

// 获得当前时间
var date = new Date();
var year = date.getYear();
var month = date.getMonth()+1;
var day = date.getDate();
var hour = date.getHours();
var Mintes = date.getMinutes();
var seconds = date.getSeconds();
str = "<date>"+(year+"-"+month+"-"+day+" "+hour+":"+Mintes+":"+seconds)+"</date>";
f1.writeLine(str);

str = "<content>"+form1.content.value+"</content>";
f1.writeLine(str);

str = "</info>";
f1.writeLine(str);

str = "</leaveWordInfo>";
f1.writeLine(str);
f1.Close();

}
else if(IsExists == "exists"){
var ts = fso.OpenTextFile("c:\\leaveWordInfo.xml", 1);  // 创建只读的 fso 对象:1 --> 只读 ; 2 --> 只写

var Rowcounts = 0 ; //记录该文件的总行数以初始化数组。

var line = ts.ReadLine();

while(!ts.AtEndOfStream){ 
Rowcounts++;
line = ts.ReadLine();
}
Rowcounts += 1;

//  定义数组用来存储从 XML 中读取出来的值, Rowcounts --> XML 文档的总行数; 8 --> 要添加新留言的行数
array = new Array(Rowcounts);  

// 至此 , 已全部将 XML 文档中的内容读出并存入到数组中储存
var ts = fso.OpenTextFile("c:\\leaveWordInfo.xml", 1);  // 创建只读的 fso 对象:1 --> 只读 ; 2 --> 只写
var str = ts.ReadLine();

for(var i =0 ;; i++)
{
array[i] = str;
if(i == Rowcounts-1){
ts.Close();
break;
}
str = ts.ReadLine();
}

// 将新留言重新写入至 XML 文档中
    // 如果不存在该文件,则创建该文件,并向该文件中写入一个 info 信息
var f1 = fso.createtextfile("c:\\leaveWordInfo.xml",true); 

var str = "";   
str = "<?xml version='1.0' encoding='GB2312'?>";
f1.writeLine(str);

str = "<leaveWordInfo>";
f1.writeLine(str);

// 重新往 XML 中写入旧留言
for(var i =2; i< array.length-1 ; i++){
var str2 = array[i] .toString();
f1.writeLine(str2);
}

// 添加新留言
str = "<info>";
f1.writeLine(str);

// 获得上一留言的 ID ,以此来设置新留言的 ID
var PreId = array[array.length -8].toString().substring(5,7);

str = "<Id>L"+(parseInt(PreId)+1)+"</Id>";
f1.writeLine(str);

str = "<name>"+document.getElementById("name").value+"</name>";
f1.writeLine(str);

// 获得该游客的性别
    var sex = document.form1.sex;
var sex_value ="";
for(var i = 0 ; i< sex.length ; i++){
if(sex[i].checked){
sex_value = document.form1.sex[i].value;
}
}

str = "<sex>"+sex_value+"</sex>";
f1.writeLine(str);

// 获得该游客的表情
    var brow = document.form1.emote;
var brow_value ="";
for(var i = 0 ; i< brow.length ; i++){
if(brow[i].checked){
brow_value = document.form1.emote[i].value;
}
}

str = "<brow>"+brow_value+"</brow>";
f1.writeLine(str);

// 获得当前时间
var date = new Date();
var year = date.getYear();
var month = date.getMonth()+1;
var day = date.getDate();
var hour = date.getHours();
var Mintes = date.getMinutes();
var seconds = date.getSeconds();
str = "<date>"+(year+"-"+month+"-"+day+" "+hour+":"+Mintes+":"+seconds)+"</date>";
f1.writeLine(str);

str = "<content>"+form1.content.value+"</content>";
f1.writeLine(str);

str = "</info>";
f1.writeLine(str);

str = "</leaveWordInfo>";
f1.writeLine(str);
f1.Close();
}

alert("留言成功!");
// location.href="../default.html";
return true;
}
}

  // 此方法判断该 XML 是否存在
  function getFile(filename)   
  {   
     if(!fso.FileExists(filename)){   
  // 不存在该文件
return "not exists";
     }   
 else
 {
return "exists";
 }  
  }   
</script>



最后给出一个 FSO 的属性大全,这些东西网上有很多,如果你需要上 Google 一搜便是。

FSO属性,目录和文件同

AtEndOfLine 属性 
如果文件指针恰好定位在 TextStream 文件中行尾标记的前面,则返回 True;如果没有,则返回 False。 
AtEndOfStream 属性 
如果文件指针位于 TextStream 文件的末尾,则返回 True;如果不是,则返回 False。 
Attributes 属性 
设置或返回文件或文件夹的属性。 
AvailableSpace 属性 
返回指定的驱动器或网络共享上,可供用户使用的空间大小。 
Column 属性 
返回 TextStream 文件中当前字符位置的列号。 
CompareMode 属性 
设置并返回比较模式,用于比较 Dictionary 对象中的字符串关键字。 
Count 属性 
返回集合或 Dictionary 对象中的项目数。 
DateCreated 属性 
返回指定的文件或文件夹的创建日期和时间。只读。 
DateLastAccessed 属性 
返回指定的文件或文件夹上一次被访问的日期和时间。 
DateLastModified 属性 
返回指定的文件或文件夹上一次被修改的日期和时间。 
Drive 属性 
返回指定的文件或文件夹所在驱动器的盘符。 
DriveLetter 属性 
返回本地物理驱动器或网络共享的盘符。 
Drives 属性 
返回一个 Drives 集合,该集合包含本地计算机上所有可用的 Drive 对象。 
DriveType 属性 
返回一个值,表明指定的驱动器的类型。 
Files 属性 
返回一个 Files 集合,该集合包含指定的文件夹中包含的全部 File 对象,包括那些设为隐藏和系统文件属性的对象。 
FileSystem 属性 
返回指定的驱动器所用的文件系统的类型。 
FreeSpace 属性 
返回指定的驱动器或网络共享上,可供用户使用的空间大小。 
IsReady 属性 
如果指定的驱动器准备就绪,则返回 True;如果没有,则返回 False。 
IsRootFolder 属性 
如果指定的文件夹是根文件夹,则返回 True;如果不是,则返回 False。 
Item 属性 
对于 Dictionary 对象中指定的关键字,设置或返回与之相对应的项目。对于集合,则根据指定的关键字返回一个项目。 
Key 属性 
设置 Dictionary 对象中的关键字。 
Line 属性 
返回 TextStream 文件中的当前行号。 
Name 属性 
设置或返回指定的文件或文件夹的名称。 
ParentFolder 属性 
返回指定文件或文件夹的上一级的文件夹对象。 
Path 属性 
返回指定文件、文件夹或驱动器的路径。 
RootFolder 属性 
返回一个 Folder 对象,代表指定驱动器的根文件夹。 
SerialNumber 属性 
返回十进制序列号,用于唯一地标识磁盘卷。 
ShareName 属性 
返回指定驱动器的网络共享名。 
ShortName 属性 
返回要求早期 8.3 命名规范的程序使用的短名称。 
ShortPath 属性 
返回要求早期 8.3 命名规范的程序使用的短路径。 
Size 属性 
对于文件,返回指定的文件的大小,以字节为单位。对于文件夹,返回文件夹所包含的所有文件和子文件夹的大小,以字节为单位。 
SubFolders 属性 
返回一个 Folders 集合,包含指定文件夹中的所有文件夹,包括那些设为隐藏和系统文件属性的文件夹。 
TotalSize 属性 
返回驱动器或网络共享的总空间,以字节为单位。 
Type 属性 
返回有关文件或文件夹类型的信息。 
VolumeName 属性 
设置或返回指定驱动器的卷名。 
方法或者属性 描述 
BuildPath() 生成一个文件路径 
CopyFile() 复制文件 
CopyFolder() 复制目录 
CreateFolder() 创建新目录 
CreateTextFile() 生成一个文件 
DeleteFile() 删除一个文件 
DeleteFolder() 删除一个目录 
DriveExists() 检验盘符是否存在 
Drives 返回盘符的集合 
FileExists() 检验文件是否存在 
FolderExists 检验一个目录是否存在 
GetAbsolutePathName() 取得一个文件的绝对路径 
GetBaseName() 取得文件名 
GetDrive() 取得盘符名 
GetDriveName() 取得盘符名 
GetExtensionName() 取得文件的后缀 
GetFile() 生成文件对象 
GetFileName() 取得文件名 
GetFolder() 取得目录对象 
GetParentFolderName 取得文件或目录的父目录名 
GetSpecialFolder() 取得特殊的目录名 
GetTempName() 生成一个临时文件对象 
MoveFile() 移动文件 
MoveFolder() 移动目录 
OpenTextFile() 打开一个文件流 

#4


楼上的不错啊,可惜不用这个,收藏先

#5


引用 2 楼 mcm_guy 的回复:
对文件操作还是不要用JS对象

赞成。

#6


虽然不用,也要收藏一下

#7


引用 4 楼 mcm_guy 的回复:
楼上的不错啊,可惜不用这个,收藏先

#8


嗯,谢谢各位了啊,但是我的关键是创建不了 这个,服务器无法创建var adoStream = new ActiveXObject("Scripting.FileSystemObject"); ,如果是要将IE的权限设置为最低,我也试过了,但是还是不行啊,不知道为什么啊

#9


加为可信任站点,设置可信任站点的安全性里面,允许所有的activex,
另外,客户端的文件夹内根本无法知道,你怎么能去操作客户端的文件呢

#10


添加信任站点,也做了,IE基本上设置是最低的权限了,但是还是不行,

#11


所以啊,这种方法一般都是行不通的。
你还不如直接做个客户端的程序,单独处理上传文件。类似ftp,直接安装到客户端

#12


不是说了吗?
 光是设定 IE 浏览器安全性低是不够的 ,还要设置 IE 浏览器 “跨域访问权限” ,因为 FSO 是使用客户端的代码来范围客户端的文件,所以一定要有个跨域访问权限。

#13


引用 6 楼 zhj92lxs 的回复:
虽然不用,也要收藏一下

#14


留个脚印