确定移动设备是否具有支持协议的应用程序
Determine if mobile device's has application that support a protocol
我有一个移动应用程序可以在用户之间发送 URL links。
接收用户应单击 link,以便移动设备使用 link 打开浏览器,然后启动我的应用程序,将 link 传递给它。
我通过向网页发送 link 来管理此操作,该网页使用我的应用程序协议重定向到 URL。
这样的 link 的一个例子是:
://www.myurl.com?一些数据
问题是如果接收用户没有安装我的应用程序,他会得到一个错误对话框。
我的 java-script 检测到这个问题并将用户重定向到下载页面,但我想避免在页面首次打开时出现 ugly 错误对话框。
有什么想法吗?
如果你需要提前知道(在实际重定向到一个hyperlink之前),如果一个移动设备有一个支持协议的应用程序,写下面的java-脚本代码在您的 link 定位的网页中:
var url="myAppName://www.myapp.com";
var request=new XMLHttpRequest();
if(request) {
request.open("GET", url);
if (request.status < 400) {
try{
window.location.replace(url);
}
catch(e){
console.log(e);
}
}
else {
console.log('Failed to find application that supports '+url+' switching to manual download');
window.location.replace("download.application.url");
}
一些解释:
总体思路是向目标用户发送一个 link 到一个网页。该网页(包含上述 java-脚本)发出 ajax 调用以查看是否可以打开特殊协议 URL。如果 ajax 调用失败,浏览器 不会 显示错误对话框。相反,它悄悄地 returns 一个错误状态代码。
上面的代码检查 Ajax 的呼叫状态代码是否小于 400,以确保任何良好的响应都意味着移动应用程序 已安装 。
如果一切正常,浏览器打开移动应用程序,将 URL 作为参数传递,然后移动应用程序处理请求。
如果未安装移动应用程序,浏览器会收到错误状态代码(同样没有对话框)。浏览器会将用户重定向到应用程序的下载页面。
我试着用一个例子让事情更清楚
1. 假设我们有一个移动应用程序名称:mobileapp .
2. 假设用户想要发送一条文本消息,其中包含目标设备上的移动应用程序要执行的某些操作。为简单起见,对目标用户的命令是:dothis .
3. 假设应用程序的网站是 www.mobileapp.com .
消息中的 link 应该是这样的:
*http://www.mobileapp.com?cmd=dothis*
当在目标移动设备上按下 link 时,将加载带有上述 java 脚本的网页。如果应用程序安装在目标移动设备上,浏览器将启动它,将 *myAppProtocol://www.myapp.com* 传递给它(您需要将此 URL 替换为您自己的)。
如果没有安装该应用程序,浏览器将重定向到该应用程序的下载页面(将download.application.url替换为您自己的。
我有一个移动应用程序可以在用户之间发送 URL links。 接收用户应单击 link,以便移动设备使用 link 打开浏览器,然后启动我的应用程序,将 link 传递给它。
我通过向网页发送 link 来管理此操作,该网页使用我的应用程序协议重定向到 URL。
这样的 link 的一个例子是: ://www.myurl.com?一些数据
问题是如果接收用户没有安装我的应用程序,他会得到一个错误对话框。
我的 java-script 检测到这个问题并将用户重定向到下载页面,但我想避免在页面首次打开时出现 ugly 错误对话框。
有什么想法吗?
如果你需要提前知道(在实际重定向到一个hyperlink之前),如果一个移动设备有一个支持协议的应用程序,写下面的java-脚本代码在您的 link 定位的网页中:
var url="myAppName://www.myapp.com";
var request=new XMLHttpRequest();
if(request) {
request.open("GET", url);
if (request.status < 400) {
try{
window.location.replace(url);
}
catch(e){
console.log(e);
}
}
else {
console.log('Failed to find application that supports '+url+' switching to manual download');
window.location.replace("download.application.url");
}
一些解释:
总体思路是向目标用户发送一个 link 到一个网页。该网页(包含上述 java-脚本)发出 ajax 调用以查看是否可以打开特殊协议 URL。如果 ajax 调用失败,浏览器 不会 显示错误对话框。相反,它悄悄地 returns 一个错误状态代码。 上面的代码检查 Ajax 的呼叫状态代码是否小于 400,以确保任何良好的响应都意味着移动应用程序 已安装 。
如果一切正常,浏览器打开移动应用程序,将 URL 作为参数传递,然后移动应用程序处理请求。
如果未安装移动应用程序,浏览器会收到错误状态代码(同样没有对话框)。浏览器会将用户重定向到应用程序的下载页面。
我试着用一个例子让事情更清楚
1. 假设我们有一个移动应用程序名称:mobileapp .
2. 假设用户想要发送一条文本消息,其中包含目标设备上的移动应用程序要执行的某些操作。为简单起见,对目标用户的命令是:dothis .
3. 假设应用程序的网站是 www.mobileapp.com .
消息中的 link 应该是这样的: *http://www.mobileapp.com?cmd=dothis*
当在目标移动设备上按下 link 时,将加载带有上述 java 脚本的网页。如果应用程序安装在目标移动设备上,浏览器将启动它,将 *myAppProtocol://www.myapp.com* 传递给它(您需要将此 URL 替换为您自己的)。
如果没有安装该应用程序,浏览器将重定向到该应用程序的下载页面(将download.application.url替换为您自己的。