【问题标题】:How do I detect if a browser can open Network Folder inside iframe?如何检测浏览器是否可以在 iframe 中打开网络文件夹?
【发布时间】:2014-06-13 12:39:29
【问题描述】:

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

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

【问题讨论】:

  • 你说的是WebDav吗?
  • 我不知道什么是 WebDav。使用不支持指向本地驱动程序的 iframe 的浏览器时,我只需要向用户显示警报
  • 你能提供一些代码示例吗,你想用 IE 做什么?
  • 它只是一个 我想通过 javascript 检测浏览器是否支持它
  • 理论上不会创建一个指向该网络文件夹的 iframe 并检测 onload 如果该 iframe 加载的文档是答案吗?但是使用任何浏览器打开网络共享都应该可以。

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


【解决方案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";

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

【讨论】:

    猜你喜欢
    • 2013-10-06
    • 2021-03-06
    • 1970-01-01
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    • 2012-10-16
    • 2018-01-23
    • 2013-03-20
    相关资源
    最近更新 更多