#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";
Обратите внимание, что ни одно из решений не позволит различать «браузер не разрешает мне доступ к сетевым папкам» и «сетевая папка недоступна, вероятно, нет сетевого подключения».