Как мне определить, может ли браузер открывать сетевую папку внутри iframe?

#javascript #google-chrome #internet-explorer #browser-detection #browser-feature-detection

#javascript #google-chrome #internet-explorer #обнаружение браузера #браузер-функция-обнаружение

Вопрос:

Мне нужно предупредить пользователей, просматривающих Chrome, о том, что им нужно открыть страницу с помощью IE, поскольку это позволяет открывать сетевую папку внутри iframe.

Но я не хочу обнаруживать браузер, есть ли способ обнаружить эту функцию?

Комментарии:

1. вы говорите о WebDAV?

2. Я не знаю, что такое WebDAV. Мне просто нужно показать предупреждение пользователю при использовании браузера, который не поддерживает iframe, указывающий на локальный драйвер

3. можете ли вы привести какой-нибудь пример кода, что вы пытаетесь сделать с IE?

4. Это просто <iframe src=»\mynetworkpathfolder»></iframe> Я хочу определить с помощью javascript, поддерживает ли это браузер

5. Разве теоретически создание iframe, указывающего на эту сетевую папку, и обнаружение onload, если документ этого iframe загружен, не будет ответом? Но тогда открытие общего сетевого ресурса с помощью любого браузера должно работать.

Ответ №1:

Нет, вы не можете обнаружить эту функцию (если это можно так назвать, разрешение веб-страницам отображать локальные папки во фрейме — очень плохая идея). Политика того же источника не позволяет вам узнать, что было загружено во фрейм, поэтому вы не можете отличить сетевую папку от страницы с ошибкой. Лучшее, что вы можете сделать, это проверить, сколько времени требуется для загрузки фрейма:

 var start = new Date().getTime();
var frame = document.createElement("iframe");
frame.addEventListener("load", function()
{
  if (new Date().getTime() - start < 100)
    alert("Looks like the network folder didn't load, try using a less secure browser?");
}, false);
frame.src = "file://mynetworkpath/folder";
document.body.appendChild(frame);
  

В моих тестах Chrome потребовалось около 30 миллисекунд для загрузки страницы с ошибкой, приведенный выше код устанавливает 100 миллисекунд в качестве порога, чтобы быть уверенным. Загрузка сетевой папки всегда должна занимать значительно больше времени. Этот код не работал в Firefox 30, по какой-то причине load событие там не запускается. Это может быть мерой предосторожности, но я этого не знаю.

В качестве альтернативы вы можете попробовать загрузить изображение, о котором известно, что оно существует:

 var img = new Image();
img.onload = function()
{
  // Can display the frame
};
img.onerror = function()
{
    alert("Try using a less secure browser?");
};
img.src = "file://mynetworkpath/folder/pixel.gif";
  

Обратите внимание, что ни одно из решений не позволит различать «браузер не разрешает мне доступ к сетевым папкам» и «сетевая папка недоступна, вероятно, нет сетевого подключения».