मैं आखिरकार एक क्रॉस-ब्राउज़र (क्रोम 32, फ़ायरफ़ॉक्स 27, आईई 11, सफारी 6) समाधान प्राप्त करने में सक्षम था जो इस और एक सुपर-सिम्पल सफारी एक्सटेंशन के संयोजन के साथ काम कर रहा था । इस समाधान का अधिकांश एक तरह से या इस और इस अन्य प्रश्न में उल्लेख किया गया है ।
यहाँ स्क्रिप्ट है:
function launchCustomProtocol(elem, url, callback) {
var iframe, myWindow, success = false;
if (Browser.name === "Internet Explorer") {
myWindow = window.open('', '', 'width=0,height=0');
myWindow.document.write("<iframe src='" + url + "'></iframe>");
setTimeout(function () {
try {
myWindow.location.href;
success = true;
} catch (ex) {
console.log(ex);
}
if (success) {
myWindow.setTimeout('window.close()', 100);
} else {
myWindow.close();
}
callback(success);
}, 100);
} else if (Browser.name === "Firefox") {
try {
iframe = $("<iframe />");
iframe.css({"display": "none"});
iframe.appendTo("body");
iframe[0].contentWindow.location.href = url;
success = true;
} catch (ex) {
success = false;
}
iframe.remove();
callback(success);
} else if (Browser.name === "Chrome") {
elem.css({"outline": 0});
elem.attr("tabindex", "1");
elem.focus();
elem.blur(function () {
success = true;
callback(true);
});
location.href = url;
setTimeout(function () {
elem.off('blur');
elem.removeAttr("tabindex");
if (!success) {
callback(false);
}
}, 1000);
} else if (Browser.name === "Safari") {
if (myappinstalledflag) {
location.href = url;
success = true;
} else {
success = false;
}
callback(success);
}
}
सफारी एक्सटेंशन को लागू करना आसान था। इसमें इंजेक्शन स्क्रिप्ट की एक पंक्ति शामिल थी:
myinject.js:
window.postMessage("myappinstalled", window.location.origin);
फिर वेब पेज जावास्क्रिप्ट में, आपको सबसे पहले संदेश घटना को पंजीकृत करना होगा और संदेश प्राप्त होने पर एक झंडा लगाना होगा:
window.addEventListener('message', function (msg) {
if (msg.data === "myappinstalled") {
myappinstalledflag = true;
}
}, false);
यह उस एप्लिकेशन को मानता है जो कस्टम प्रोटोकॉल से जुड़ा है, सफारी एक्सटेंशन की स्थापना का प्रबंधन करेगा।
सभी मामलों में, यदि कॉलबैक गलत है, तो आप उपयोगकर्ता को सूचित करना जानते हैं कि एप्लिकेशन (यानी, यह कस्टम प्रोटोकॉल है) स्थापित नहीं है।