ユーザーがカスタムプロトコル(myapp://superlink
など)のリンクをクリックしたとき
アプリを起動するか、ユーザーが設定アプリをダウンロードして実行できるようにする必要があります
カスタムプロトコルが登録されているかどうかを確認するためのクロスブラウザーの方法を探しています
私はユーザーエージェントのサーバー側(IEの場合)をチェックしてこれを特定しようとしました
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\User Agent\Post Platform] "myapp" = ""
送る
`....NET CLR 3.0.30729; .NET4.0C; .NET4.0E; InfoPath.3; **myapp**`
ユーザーエージェントとして
これは良い、きれいな方法、簡単な設定です:
.regファイルをダウンロードして実行するか、MS Windowsポリシーを介して伝達するだけです
ChromeおよびFirefoxの場合、これを修正できません
(jsで)クライアント側のソリューションはありますか?
私の環境:IE8 +、Chrome(最新)、Firefox(最新))
それは常に私を失敗させることはありませんこの古いトリックがあります。
必要なコア機能はsetTimeout
です。詳細をお知らせします。
setTimeout(function() {
window.location = "http://iTunes.com/app/yourapplocation";
}, 200);
// once you do the custom-uri, it should properly execute the handler, otherwise, the settimeout that you set before will kick in
window.location = "myapp://superlink";
あなたはそれがおそらくリンクであると述べたので、私はあなたの便宜のためにこの素晴らしい関数を作りました:
HTMLコード
<a href="myapp://superlink" data-href-alt="http://iTunes.com/app/yourapplocation">Click here</a>
JSコード
$("a[href*='myapp://']").click(function(e)
{
var el = $(this);
setTimeout(function() {
window.location = el.data("data-href-alt");
}, 200);
// once you do the custom-uri, it should properly execute the handler, otherwise, the settimeout that you set before will kick in
window.location = el.data("href");
e.preventDefault();
});
これがあなたに役立つことを願っています:)
同様の問題がありましたが、カスタムプロトコルが既に登録されている(実行可能ファイルを開く)かどうかを確認したり、ダウンロードページを開いたり、何か他のことをしたりする必要がありました。残念ながら、ブラウザによって動作が異なるため、これに対処する簡単な方法はありません。私はすべての情報を収集しようとし、この問題のためのかなり一般的なライブラリを思い付きました、あなたは見てみることができます:
https://github.com/ismailhabib/custom-protocol-detection
pS:Windows 8以外のソリューションIEはかなり醜いですが、より良いソリューションを見つけることができませんでした。
kororoのソリューションは何らかの理由で機能しないので、代わりにこの少し変更されたソリューションを使用して管理しました。
<html>
<a id="link">Click Me</a>
<script>
var link = document.getElementById('link');
var timeout;
window.addEventListener('blur',function(e){
window.clearTimeout(timeout);
})
link.addEventListener('click', function(e) {
timeout = window.setTimeout(function() {
console.log('timeout');
window.location = "https://myapp.net";
}, 1000);
window.location = "myapp://";
e.preventDefault();
});
</script>
</html>
コロノの答えを更新しました、これは私にとってうまくいきました:
$(function() {
var timeIndex;
$("a[href*='myapp://']").blur(function(e)
{
clearTimeout(timeIndex);
});
$("a[href*='myapp://']").click(function(e)
{
var el = $(this);
timeIndex = setTimeout(function() {
window.location = el.attr("data-href-alt");
}, 200);
// once you do the custom-uri, it should properly execute the handler, otherwise, the settimeout that you set before will kick in
window.location = el.attr("href");
e.preventDefault();
});
});
サラーム
インストール ismailhabib/custom-protocol-detection
このJSファイルを含めることによって protocolcheck.js
次に、このようなコードを書きます
<div id="protocol" href="myprotocol:[email protected]">Check Protocol</div>
<script>
$("#protocol").click(function (event) {
protocolCheck($(this).attr("href"), function () {
alert("protocol not recognized");
});
event.preventDefault ? event.preventDefault() : event.returnValue = false;
});
</script>