自定义URL Protocol 协议实现跨浏览器打开链接

因历史原因,在chrome或firefox下打开IE这种跨浏览器打开链接也是一种需求,有两种方式可以实现,一是注册自定义协议(Registering an Custom Protocal)实现,二是通过桌面服务间接操作

注册自定义协议实现

自定义协议简单讲就是你经常看到的
<a href=”tencent://message …,
还有
– thunder://  迅雷的
– item:// itunes的
– ed2k:// 电驴

同样我们可以使用<a href=”openIE:https://bing.com”>使用IE浏览器打开bing</a>或 <a href=”openCHROME:https://bing.com”>使用CHROME浏览器打开bing</a>

如何注册自定义协议可以参考 Registering an Application to a URI Scheme

注册一个openIE和openCHROME,可以看这个注册表文件 ,双击安装.reg注册表文件就可以实现。

IE浏览器的一些参数参考: https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/general-info/hh826025(v=vs.85)

通过桌面服务间接操作

现代浏览器中的JavaScript程序没有权限去调用系统资源,但桌面程序可以。那么只需这个桌面程序能提供HTTP或websocket服务,接受AJAX指令,就可以帮助JavaScript间接调用系统资源.

server.py
...
if program == 'ie':
    os.system('"C:\Program Files\internet explorer\iexplore.exe" ' + url)
elif program == 'chrome':
    os.system('"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" ' + url)
...
server_socket.bind(("", 8000))
...

JS只需将指令传过去

<a onclick="openPage('http://127.0.0.1/index.html','chrome')">用Chrome打开此链接</a>
...
<script>
    function openPage(_url, _program) {
        var x = document.createElement("script");
        x.src='http://127.0.0.1:8000/?url='+_url+'&program='+_program;
        document.body.appendChild(x)
    }
</script>
这个还需要考虑安全问题

Leave a Reply

Your email address will not be published. Required fields are marked *