ff安全机制问题啊~~~55555555

kisslan 2008-08-26 12:19:40
1.IE可以正常显示本地的图片,但是FF会出问题。写成下面的形式静态页面可以解决问题!
<image src="file:///F:\FaceBook\facebook02\sendPresent\image\10.jpg" height="70px" width="70px"/>
但是如果这个html放在服务器上就不行了!察了资料说是安全机制问题!但是现在要做一个上传的东西啊!
需要支持ff不知道该怎么办了阿?不知道有没有什么办法啊

如果本地打开是可以用file:///C:/fruit.jpg这样的写法。不过我是在网上访问的。
比如打开c:\test.htm可以看到。
通过www.web.com/test.htm看就看不到了。我主要是想当一个文件选择框选择了一个图片后,在确定上传前,先生成一个预览图。在ie下可以,ff不支持么?
就是类似这个问题啊!

2.js如何把\换成/
例如
var path1 = "c:\dir1\dir2";
把上面字符串变成
c:/dir1/dir2


...全文
217 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
sxn19811006 2008-08-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 healer_kx 的回复:]
2,
JS的String类,支持replace方法。
[/Quote]
sebatinsky 2008-08-27
  • 打赏
  • 举报
回复
关注这个,谢谢!~
Go 旅城通票 2008-08-27
  • 打赏
  • 举报
回复
ie6和safari不需要,ff和opera需要,我给你的代码里面已经判断过了




//添加原型函数
String.prototype.replaceall=function(){
return this.replace(/( |\\)/g,function($1){if($1==" ")return "%20";else if($1=="\\")return "/";});
}


var v="c:\\my pic\\0.jpg";
alert(v);
v=v.replaceall();//使用原型更改值
alert(v);
kisslan 2008-08-27
  • 打赏
  • 举报
回复
[Quote=引用 30 楼 showbo 的回复:]
1.不好意思,没打开iis调试,没想到ff通过服务器访问时不能使用file:///协议,^___^

在ff和opera下只好通过服务器来处理了,服务器页面采用php写的,代码如下
test.htm

HTML code<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=gb2312"/>
</head>
<body>
<form method="post" enctype="multipart/form-data" action="gotopage.php">
<input type="file" name="userfile" onchange=…
[/Quote]

1.就是说还是要上传到服务器了啊?
2.var v="c:\\my pic\\0.jpg";
v=v.replace(/ /g,"%20");
alert(v);
v=v.replace(/\\/g,"/");
alert(v)
这个怎么能全部替换呢就是replaceall的意思啊?
jacklinchen 2008-08-27
  • 打赏
  • 举报
回复
1、服务器上是要有个专门的文件夹,然后都放在此文件下
2、用replace()替换
Go 旅城通票 2008-08-27
  • 打赏
  • 举报
回复
1.不好意思,没打开iis调试,没想到ff通过服务器访问时不能使用file:///协议,^___^

在ff和opera下只好通过服务器来处理了,服务器页面采用php写的,代码如下
test.htm
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=gb2312"/>
</head>
<body>
<form method="post" enctype="multipart/form-data" action="gotopage.php">
<input type="file" name="userfile" onchange="SetViewPic(this)"/><br/>
</form>
预览图片<br>

</body></html>
<script>
var v="c:\\my pic\\0.jpg";
v=v.replace(/ /g,"%20");
alert(v);
v=v.replace(/\\/g,"/");
alert(v)

//暂时测试ie6和safari【3.0.4】能使用img标签的file:///协议浏览图片
//其他只能交由服务器处理了,并且容器为iframe标签
var UseIMGTag=navigator.userAgent.toLowerCase().indexOf("applewebkit")!=-1;
if(!UseIMGTag&&document.all){//不是safari,则判断下是否为ie7以下的浏览器
var m=/msie(.+?)(?=;)/i.exec(navigator.userAgent);
if(m&&parseInt(m[1])<7)UseIMGTag=true;
}
var Reg=/\.(gif|jpg|bmp|png)$/i

if(UseIMGTag)document.write("<img id='imgView'/>");
else document.write('<iframe src="javascript:void(0)" frameborder="1" '
+'style="width:100px;height:100px;" id="ifViewPic" name="ifViewPic"></iframe>');
function $(id){return document.getElementById(id);}
function SetViewPic(obj)
{
//先检查是否为图片
if(!Reg.test(obj.value)){
alert("不是图片文件!");
return;
}
if(UseIMGTag)$("imgView").src="file:///"+obj.value;//可以使用file:///协议的
else{//提交到viewpic.php,然后输出临时文件
var f=obj.form;
var oldAC=f.action;
var oldTag=f.target;
f.target="ifViewPic";
f.action="viewpic.php";
f.submit();
//改回默认值
f.target=oldTag;
f.action=oldAC;
}
}
</script>


viewpic.php
<?php
$type=$_FILES['userfile']['type'];
if(!preg_match('/(jpeg|jpg|png|gif|bmp)$/',$type))die("{$type}为不可以浏览器的类型!");

$tmpPath=$_FILES['userfile']['tmp_name'];
if(is_uploaded_file($tmpPath)){
header("content-type:$type");
readfile($_FILES['userfile']['tmp_name']);
}
else die("上传失败无法预览!");
?>






2,没发现你的问题啊

var v="c:\\my pic\\0.jpg";
v=v.replace(/ /g,"%20");
alert(v);
v=v.replace(/\\/g,"/");
alert(v)
剑心1977 2008-08-27
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 pimshell 的回复:]
回答第一个问题:

在vista下,IE也不能显示本地的图片。因为,http://处于保护模式下,而file:///处于非保护模式下。
[/Quote]

希望你再好好想一想我上面说的,如果不用特殊的技术(如ActiveX等),在vista下,IE也是不能显示本地的图片的。
不必徒劳了。
kisslan 2008-08-27
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 mingxuan3000 的回复:]
var url = document.URL

url=url.replace(/(^.*?\/\/.*?\/.*?\/).*?$/,"$1")+"tam/abc/sound/"+soundName+".wav"

这种路径就是
www.web.com/tam/abc/sound/"+soundName+".wav" 的形式呀,我这个是声音文件,你的图片也一样
,放到你里html那个目录下,这个目录可以通过上面的形式访问
[/Quote]


555要能预览本地的啊....不是服务器上的啊55
kisslan 2008-08-27
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 showbo 的回复:]
1

HTML code<input type="file" onchange="SetViewPic(this.value)"/><br/>
<img id="imgView"/>
<script>
function SetViewPic(v)
{//ie6和ff 2.0.0.12测试通过
document.getElementById("imgView").src="file:///"+v;
}
</script>

[/Quote]
如果把这个代码放在一个test.html里面!然后用ff直接打开确实没问题啊!
但是如果把这个test.html页面放到虚拟服务目录上就不行了啊!
下面这样访问http://localhost/test.html就不行了啊!好象说ff的安全机制害怕
打开一个网络上的页面,该页面如果直接调用一个本地的文件,怕有病毒什么的吧!但是我现在
做这个功能需要预览本地图片啊!所以不知道能不能有什么办法饶过去啊!



[Quote=引用 23 楼 showbo 的回复:]
2
只能说你的字符转义没搞清楚

JScript codevar path1 = "c:\\dir1\\dir2";
alert(path1);
alert(path1.replace(/\\/g,"/"));
[/Quote]

这个问题我发现是我自己搞乱了

我先将原始字符串中的空格用replace(/ /g,'%20')替换成%20
然后在用replace(/\\/g,'/') 将第一步的\替换成/
但是这样做的结果导致,空格又回来了!

如果反过来做\又不能变成/了!
所以一直出错!不知道怎么解决!

错误操作如下
c:\my pic\0.jpg
然后先替换成了c:\my%20pic\0.jpg
然后再替换成c:/my pic/0.jpg

其实希望结果
c:/my%20pic/0.jpg

不知道该怎么做啊?
cftea 2008-08-27
  • 打赏
  • 举报
回复
第一个问题是由于安全限制,在 FF 中的确显示不出来,IE7 中也是显示不出来,只不过 IE7 中有其它解决办法。FF 预览客户端的图片,感觉大家都在找解决办法,但都是水中捞月,目前能做的,只是放弃对 FF 在这点上的支持。如果大家有什么解决办法,一定要分享噢。

第二个问题是由于你的 path1 写法不对,应该连续写两个\,因为单独的\代表转义字符。
Mind0n 2008-08-27
  • 打赏
  • 举报
回复
关注中,谢谢!
mingxuan3000 2008-08-27
  • 打赏
  • 举报
回复
var url = document.URL

url=url.replace(/(^.*?\/\/.*?\/.*?\/).*?$/,"$1")+"tam/abc/sound/"+soundName+".wav"

这种路径就是
www.web.com/tam/abc/sound/"+soundName+".wav" 的形式呀,我这个是声音文件,你的图片也一样
,放到你里html那个目录下,这个目录可以通过上面的形式访问
Go 旅城通票 2008-08-27
  • 打赏
  • 举报
回复
1
<input type="file" onchange="SetViewPic(this.value)"/><br/>
<img id="imgView"/>
<script>
function SetViewPic(v)
{//ie6和ff 2.0.0.12测试通过
document.getElementById("imgView").src="file:///"+v;
}
</script>




2
只能说你的字符转义没搞清楚
var path1 = "c:\\dir1\\dir2"; 
alert(path1);
alert(path1.replace(/\\/g,"/"));



3
你指的gb2312能显示的非gb2312字符集的字符是哪些??我怎么没碰到过
kisslan 2008-08-27
  • 打赏
  • 举报
回复
1.IE可以正常显示本地的图片,但是FF会出问题。写成下面的形式静态页面可以解决问题!
<image src="file:///F:\FaceBook\facebook02\sendPresent\image\10.jpg" height="70px" width="70px"/>
但是如果这个html放在服务器上就不行了!察了资料说是安全机制问题!但是现在要做一个上传的东西啊!
需要支持ff不知道该怎么办了阿?不知道有没有什么办法啊

如果本地打开是可以用file:///C:/fruit.jpg这样的写法。不过我是在网上访问的。
比如打开c:\test.htm可以看到。
通过www.web.com/test.htm看就看不到了。我主要是想当一个文件选择框选择了一个图片后,在确定上传前,先生成一个预览图。在ie下可以,ff不支持么?
就是类似这个问题啊!

2.js如何把\换成/
例如
var path1 = "c:\dir1\dir2";
怎么能把上面字符串alert出
c:/dir1/dir2 这样的效果啊?


3.发现一个怪问题为什么
页面上的charset写=gb2312
却可以显示gb2312里面没有的字呢?
这是为什么?
kisslan 2008-08-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 healer_kx 的回复:]
2,
JS的String类,支持replace方法。
[/Quote]

晕!哪个是关键字所以不是用replace的方法能转换的
kisslan 2008-08-27
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 chinmo 的回复:]
做预览FF下不支持??
[/Quote]


<image src="file:///F:\FaceBook\facebook02\sendPresent\image\10.jpg" height="70px" width="70px"/>

就这个代码如果起个名字叫test.html
本地可以打开!但是如果这个test.html放在服务器上就没办法打开了
mingxuan3000 2008-08-26
  • 打赏
  • 举报
回复

var _s = document.getElementById(soundName);
var url = document.URL

url=url.replace(/(^.*?\/\/.*?\/.*?\/).*?$/,"$1")+"tam/abc/sound/"+soundName+".wav"
alert(url)
_s.src = url;


tam/abc是应用程序里面放html的目录
healer_kx 2008-08-26
  • 打赏
  • 举报
回复
第一个问题看得不是很明白。
mingxuan3000 2008-08-26
  • 打赏
  • 举报
回复
和html放一个目录下进行访问
healer_kx 2008-08-26
  • 打赏
  • 举报
回复
should be:
var path1 = "c:\\dir1\\dir2";


加载更多回复(13)

87,922

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧