2013-02-12 146 views
12

对于允许在浏览器中预览文档的Web应用程序,我想检查用户的浏览器是否支持当前文档的MIME类型的预览。检查浏览器是否支持特定的MIME类型?

是否有一种基于Javascript的方式来匹配当前的MIME类型与浏览器支持的类型?

谢谢!

+0

当浏览器从您想要执行此操作的服务器请求页面时,它会通过它接受的各种文档(HTTP'accept'请求标头)发送一个列表。所以,你甚至可以在你向他们展示页面之前知道(你可以通过将其嵌入到响应中来将这些信息提供给JavaScript)。当然,这要求您动态响应最初的请求,可能不是您要查找的内容。 – 2013-02-12 15:03:11

+0

也许[这个问题](http://stackoverflow.com/questions/10704489/javascript-get-mime-type-support)有帮助。他们使用['navigator.mimeTypes'](https://developer.mozilla.org/en-US/docs/DOM/window.navigator.mimeTypes)这可能不适用于所有浏览器... – hsan 2013-02-12 15:03:57

+0

@TJCrowder :这是一个好主意。由于我的应用程序是基于ExtJS-Ajax的,可能是一个相当有前途的方法。我会试一试。谢谢! – Windwalker 2013-02-12 16:50:44

回答

3

您可以进行AJAX调用并检查mimetype的响应标头。

$.ajax({ 
    type: "GET", 
    url: 'http://..../thing.pdf', 
    success: function (output, status, xhr) { 
     alert("done!"+ xhr.getAllResponseHeaders()); 
     alert("done!"+ xhr.getResponseHeader("Content-Type")); 
    } 
    }); 
+0

感谢您的提示,这听起来很有希望。不幸的是,Ajax调用二进制文件在IE中不起作用,请参阅:http:// stackoverflow。com/questions/9783330/getting-the-c00ce514-ie-when-attempting-to-load-a-swf-file – Windwalker 2013-02-12 16:44:20

+0

Ahhh darn,它似乎总是停在IE不是:( – Timmetje 2013-02-12 16:47:56

+0

Idea :你如何创建一个代理例如:proxy.php?file = document.pdf IE不会将其作为二进制文件处理,你可以在你的代理中设置你的响应标题,只要通过MIME类型等等。 – Timmetje 2013-02-12 16:49:19

0

如果您定义了特定文档类型需要哪个插件,那么您可以尝试查看是否需要插件。至少应该在Firefox和Chrome上运行。 window.navigator.plugins

And here is a nice example

+1

其实问题在于,我们的客户几乎都在使用IE,因为它对大多数公司来说都是相当标准的,如果你总是不得不面对老式的浏览器,那就太糟糕了。 ... – Windwalker 2013-02-12 16:46:40

1

在这个问题上出现了同样的问题,我认为,试图看看它

Check if a browser supports a specific MIME type?

+0

对不起,这不完全是我的情况。 我是客户;即Javascript(不是PHP中的问题引用),我确实有一个具有某种MIME类型的文档,我想决定是否要 a)打开在内部预览中显示文档,如 或 b)跳过内部预览,如果不支持MIME类型 – Windwalker 2013-02-12 15:22:56

5

在最新的浏览器有navigatior.plugins阵列状物体。你可以检查你的MIME类型的每个插件。

这里是解决方案gistjsfiddle

var mimeCheck = function (type) { 
    return Array.prototype.reduce.call(navigator.plugins, function (supported, plugin) { 
     return supported || Array.prototype.reduce.call(plugin, function (supported, mime) { 
      return supported || mime.type == type; 
     }, supported); 
    }, false); 
}; 
+2

它可以工作,但它说chrome不支持image/jpg。有没有办法让所有类型包括图像。 – 2016-03-04 18:48:59

相关问题