即,x-someapp://某种行为或类似的东西。
如何使用Google Chrome浏览器打开此网址?
默认情况下,Chrome开始在Google引擎中进行搜索,而不是启动App并将URL处理传递给…
Safari推出了一些注册的应用程序。这是对的。
Firefox和Opera询问要做什么…我也可以启动App。
但Chrome …不问。
我甚至试图用JavaScript里面写一些HTML页面来发送XHttpRequest:
function _httpExecuteCallback()
{
if (httpRequestCallbackFunction != null) {
if (httpRequest.readyState == 4) {
if (httpRequest.status == 200) {
httpRequestCallbackFunction();
httpRequestCallbackFunction = null;
}
}
}
}
function _httpGet(url,callbackFunction)
{
httpRequest = false;
httpRequestCallbackFunction = callbackFunction;
httpRequest = new XMLHttpRequest();
httpRequest.onreadystatechange = _httpExecuteCallback;
httpRequest.open('GET',url,true);
httpRequest.send(null);
}
_httpGet('x-someapp://test',function(){})
没有结果…
[blocked] The page at reports blah blah ran insecure content from customproto//blah blah
这是一个解决方案(这需要我几天的研究):
<input type='button' value='Test Custom Url' onclick='exec()'>
<script>
function submitRequest(buttonId) {
var d = (window.parent)?window.parent.document:window.document
if (d.getElementById(buttonId) == null || d.getElementById(buttonId) == undefined) return;
if (d.getElementById(buttonId).dispatchEvent) {
var e = d.createEvent("MouseEvents");
e.initEvent("click",true,true);
d.getElementById(buttonId).dispatchEvent(e);
}
else {
d.getElementById(buttonId).click();
}
}
function exec(){
var d = (window.parent)?window.parent.document:window.document
var f = d.getElementById('customUrlLink')
if (f ) {f.parentNode.removeChild(f);}
var a = d.createElement('a');
a.href = 'mycustomproto://arg1';
a.innerHTML = "Link"
a.setAttribute('id','customUrlLink');
a.setAttribute("style","display:none; ");
d.body.appendChild(a);
submitRequest("customUrlLink");
}
</script>
这个代码不适用于IE。我发现使用这种技术IE将自定义协议的参数限制为小于1000,其中使用iFrame技术IE将允许2083个字符。
克服javascript中url限制的唯一方法是吸收数据并多次调用。如果有人想要刺伤,请让我知道它是怎么回事。我想用它。
要在执行的应用程序中处理长URL,请将令牌传递到应用程序中,并从URL获取数据。
所以现在我使用一个功能Chrome / FF和另一个功能的IE。
这些链接帮助我开发了这个解决方案:
https://superuser.com/questions/655405/custom-protocol-handler-not-working-in-chrome-on-ssl-page
Simulating a click in jQuery/JavaScript on a link
(希望我几天前知道这一点….希望这有助于某人)
==================================================
更新:(8小时以后)
==================================================
Jake为chrome提供了一个很棒的解决方案:https://superuser.com/questions/655405/custom-protocol-handler-not-working-in-chrome-on-ssl-page
这只适用于铬:
window.location.assign("customprotocol://");
它会在iframe中失败,所以这是正常工作:
var w = (window.parent)?window.parent:window w.location.assign(service + '://' + data)
==================================================
更新:(周后)
==================================================
打开自定义协议的所有示例,包括我自己的,在URL中都有一个“://”。这正是导致SSL警告的原因。
结果解决的办法是将“://”改为“:”
这样做:
src="x-myproto:query" .....
SSL警告将会消失。
==================================================
关注:(经过几个月的生产使用)
==================================================
这一直很好用于歌声。检测浏览器,如果chrome执行此操作:
var w = (window.parent)?window.parent:window
w.location.assign('myproto://xyzabcdefetc')
对于IE和其他浏览器,我做点略有不同。
请注意,浏览器对您可以在自定义url协议中放置多少数据施加限制。只要您的字符串低于800个字符,这似乎是在所有浏览器中工作的魔术数字。