如何检测浏览器是否可以在iframe中打开网络文件夹?

时间:2014-06-13 12:39:30

标签: javascript google-chrome internet-explorer browser-detection browser-feature-detection

我需要提醒用户浏览Chrome浏览器需要使用IE打开网页,因为它允许在iframe中打开网络文件夹。

但是我不想检测浏览器,有没有办法检测这个功能?

1 个答案:

答案 0 :(得分:3)

不,您无法检测到此功能(如果您可以调用它,允许网页在框架中显示本地文件夹是一个非常糟糕的主意)。同源策略可防止您知道加载到框架中的内容,因此无法将网络文件夹与错误页面区分开来。您可以做的最好的事情是检查框架加载所需的时间:

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";

请注意,两种解决方案都不允许区分“浏览器不允许我访问网络文件夹”和“网络文件夹无法访问,可能没有网络连接。”