file: // и пробелы в именах файлов - PullRequest
1 голос
/ 19 января 2010

Я отлаживал любопытную проблему с путями к файлам в экземпляре IE, встроенном в мое приложение.

У меня есть следующий 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:///), поэтому все три ссылки работают.

Кто-нибудь сталкивался с такой проблемой? Есть идеи как это исправить?

Ответы [ 2 ]

1 голос
/ 19 января 2010

Оказывается, это связано с тем, что в HTML указана одна Схема URI (проприетарная), а изображения указаны в другой ( Схема файлового URI ).

Изменение их обоих для использования file:/// устранило проблему.

Тем не менее, я до сих пор не знаю, почему пути без пробелов работали, а пути с пробелами - нет.Если у кого-то есть идея, почему (желательно с авторитетным источником, если таковой имеется) - не стесняйтесь опубликовать его как ответ, и я дам вам согласие.

0 голосов
/ 19 января 2010

Ради тестирования возможно попробуйте:

foobar('file:///C:/path+spaces/someotherimage.bmp');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...