2010-01-19 84 views
1

我一直在调试嵌入在我的应用程序中的IE实例中的文件路径的奇怪问题。file://和文件名中的空格

我有以下的JavaScript/jQuery的:

<script type="text/javascript"> 
function foobar(src) { 
    $("img").attr("src", src); 
} 
</script> 

我的DOM包含单个img标签:

<img src="loading.jpg" /> 

我有以下三个环节,其调用foobar激活:

<a href="javascript:foobar('file:///C:/nospaces/someimage.bmp');">without spaces</a> 
<a href="javascript:foobar('file:///C:/path spaces/someotherimage.bmp');">with spaces</a> 
<a href="javascript:foobar('file:///C:/path%20spaces/someotherimage.bmp');">with spaces</a> 

所有这些链接在IE/FF中效果很好/ Chrome,但只有第一个链接在我的应用程序中使用IE的嵌入式实例。

单击第二个链接之后,如果我用鼠标右键单击图片(这两个不工作的一个,第三个给出了同样的结果),我可以看到图像的URL是这样的:

 
file://C:\path%20spaces\someotherimage.bmp 

如果我将该地址粘贴到“开始” - >“运行”,则不会加载。

更改地址添加file:三分之一/后,这样的:

 
file:///C:\path%20spaces\someotherimage.bmp 

允许开始 - >运行以打开图像。

有趣的是,非嵌入式IE保留所有3个斜线(file:///),所以三个链接都可以工作。

有没有人遇到过这类问题?任何想法如何解决它?

+0

您是否尝试过编码原始URL中的空格?或者使用onclick而不是href =“javascript:...”来触发这个动作?当涉及到处理稍微不正常的URL时,IE有很长的古怪历史,并且由于该服务是由系统DLL提供的,所以它并不意外我认为嵌入式系统可能会使用旧版/替代版本 – Shog9 2010-01-19 14:44:15

+0

@ Shog9 - 感谢您的建议 - 我已经尝试过'%20',现在我尝试了'onclick' - 没有运气。最后5小时 – 2010-01-19 14:48:15

+0

@ Shog9 - pinging你以防万一你好奇 - 我解决了下面的问题 – 2010-01-19 15:38:42

回答

1

原来这是由于HTML被指定一个URI Scheme(专有的),而在另一个被指定的图像(File URI Scheme)。

更改它们都使用file:///修复了这个问题。

这就是说,我仍然不知道为什么没有空格的路径工作,而空间路径没有。如果有人知道为什么(最好有权威来源,如果有的话) - 随意发布它作为答案,我会给你接受。

+0

Hrm ... IE很奇怪。方案是作为一个可插入的处理程序来实现的,那么我想它可能在执行例程时遇到了一个错误,这些处理程序提供了解析相对URL;否则,我怀疑系统例程具有相同的URL。 – Shog9 2010-01-20 20:45:01

0

出于测试的目的或许尝试:

foobar('file:///C:/path+spaces/someotherimage.bmp'); 
+0

谢谢,但是我也试过这个,也没有运气! – 2010-01-19 15:35:57