Javascript 添加带有自定义协议的iframe会导致IE导航到iframe源

Javascript 添加带有自定义协议的iframe会导致IE导航到iframe源,javascript,internet-explorer,iframe,Javascript,Internet Explorer,Iframe,这个问题很简单,一定有解决办法 我创建了一个 代码是: $(function(){ $('<iframe>').attr('src', 'xyz://test').appendTo('body'); }); $(函数(){ $('').attr('src','xyz://test)。附于(‘主体’); }); 当iframe被追加时,IE就会导航到src。我测试了IE9和IE10。这在Firefox、Chrome或Safari中不会发生 它仅在使用自定义协议(如xyz:/

这个问题很简单,一定有解决办法

我创建了一个

代码是:

$(function(){
    $('<iframe>').attr('src', 'xyz://test').appendTo('body');
});
$(函数(){
$('').attr('src','xyz://test)。附于(‘主体’);
});
当iframe被追加时,IE就会导航到src。我测试了IE9和IE10。这在Firefox、Chrome或Safari中不会发生

它仅在使用自定义协议(如xyz://而不是http://时发生

感谢您的帮助。

这可能会有所帮助

应用协议

与可插拔协议相比,应用程序协议要复杂得多 更简单。他们没有将内容返回到浏览器,而是简单地 启用浏览器(或其他程序,如文字处理器或PDF) 阅读器)启动程序,将请求的URL传递给该程序 节目。应用程序协议的常见示例包括 邮件收件人:[1]新闻:,和onenote:协议


被接受的答案与解释IE行为的MSDN文章有链接。简而言之,本文解释说,没有办法测试未安装的自定义协议

在大多数浏览器中,用作iframe源的已卸载协议将在iframe内默默失败。可以观察到该故障,并将其视为未安装协议的迹象

但是,在IE中,即使协议用作iframe src,而不是单击的链接,iframe也会将父浏览器窗口重定向到失败的协议地址

为了解决这个问题,我们必须设置一个与已安装的应用程序通信的服务器端组件

在IE中,我们总是显示安装说明,当他们安装软件时,服务器端组件向浏览器发出信号,以设置一个cookie或本地存储值,指示软件已安装


这适用于大多数情况,但并非所有情况。如果此人卸载了软件,它仍然会失败。此外,如果他们清除了Cookie或本地存储,那么即使软件已经安装,他们也会被要求重新安装。

我不确定我是否理解。你的意思是在iframe中显示源代码,而不是调用外部应用程序来处理URL?这确实很有帮助,谢谢!我会将您的答案标记为已接受,但随后会发布第二个答案,其中包含我们最终使用的解决方案的更多详细信息。在Win 8,IE 10+中,您可以使用msLaunchUri。引用上述文章:而是使用msLaunchUri api启动协议,如:
navigator.msLaunchUri('skype:123456',function(){alert('success');},function(){alert('failed');})如果未安装协议,将触发故障回调。否则,将启动协议并触发成功回调。