栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何检查是否支持自定义协议

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何检查是否支持自定义协议

不幸的是,没有简单的方法来实现这一目标。当然,没有预先确定是否安装协议处理程序的方法。

*正如您所提到的, *Internet Explorer
具有该

protocolLong
属性,但是我很难让它为所有自定义协议处理程序返回除“未知协议”之外的任何内容-
如果有人知道如何让IE返回正确的值,请告诉我因此我可以更新此部分。我用IE找到的最好的解决方案是将附加到用户代理字符串或安装浏览器扩展以及与您的应用一起公开Java可访问属性的应用程序。

*到目前为止, *Firefox
是主要浏览器中最简单的浏览器,因为它使您可以尝试捕获失败的导航尝试。返回的错误对象包含一个

name
属性,其值为
NS_ERROR_UNKNOWN_PROTOCOL

try {    iframe.contentWindow.location.href = "randomprotocolstring://test/";} catch(e) {    if (e.name == "NS_ERROR_UNKNOWN_PROTOCOL")        window.location = "/download/";}

Firefox将弹出并带有其自己的警报框:

Firefox不知道如何打开该地址,因为该协议(随机协议字符串)未与任何程序关联。

关闭此框后,该

catch
块将执行,并且您将拥有一个有效的备用。

其次是 Opera
,它使您可以利用可预测性定律来检测单击的自定义协议链接是否成功。如果单击自定义协议,则该页面将保持不变。如果没有安装处理程序,Opera将导航到错误页面。这使得使用iframe进行检测非常容易:

   iframe.contentWindow.location = "randomprotocolstring://test/";   window.setTimeout(function () {       try {alert(ifr.contentWindow.location);        } catch (e) { window.location = "/download/"; }   }, 0);

setTimeout
是为了确保我们在导航后检查位置。重要的是要注意,如果您尝试访问该页面,Opera会引发ReferenceException(跨域安全性错误)。没关系,因为我们所需要知道的是位置从更改为
about:blank
,因此
try...catch
工作正常。

Chrome 在这方面很烂。如果自定义协议处理程序失败,则绝对压缩。如果处理程序有效…您猜对了…它确实可以压缩。恐怕无法区分两者。

我尚未测试过 Safari, 但我担心它会与Chrome相同。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/432306.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号