2

Windows 8.1 / IE 11 自定义 url 协议搞砸了。启动时,应用程序被执行,然后浏览器中的 url 重定向到about:blank

甚至 Skype 的协议也能做到:

<a href="skype:_some_skype_account_here_?chat">Chat via Skype</a>

我尝试了一些方法,例如使用 iframe、document.location.href = u; 结果很差。

当链接位于 iframe 内时,这似乎有效,否则会失败:

 <a href="javascript:'x();'>test</a>  
 document.location.href = 'proto://datadatadata';

任何人都知道如何在浏览器不重定向到about:blank的情况下启动协议的应用程序?

我现在将 IE11 视为完全不同的浏览器:chrome、FF、safari、IE7-10 和 IE11

4

1 回答 1

3

此版本似乎正在运行:

var iframe = document.createElement('IFRAME');
iframe.setAttribute('id' 'protoIframe');
iframe.setAttribute('src', 'myapp://datadatadata' );
iframe.style.display = 'none'; 
iframe.style.width   = 1+'px'; 
iframe.style.height  = 1+'px'; 
document.documentElement.appendChild(iframe);

更新:(几个月后)

这是我用于 IE 的最终版本。我检测到浏览器,如果 IE 则执行以下操作:

var hst = { pad:'--eof--'}

hst.forIE = function(service, data) {
    var f = document.getElementById('ecPrinterIframe')
    if (f ) 
        f.parentNode.removeChild(f);
    var iframe = document.createElement('IFRAME');
    iframe.setAttribute('id',    'ecPrinterIframe');
    iframe.setAttribute('src', 'myproto://' + data + hst.pad );
    iframe.style.display    = 'none'; 
    iframe.style.width      = 1+'px'; 
    iframe.style.height     = 1+'px'; 
    document.documentElement.appendChild(iframe);
}    
于 2013-11-22T03:01:54.550 回答