当我们点击链接<a href="tel:123">123</a>
时,我们系统的默认呼叫应用程序将调用此号码。
显然,我们可以将此链接添加到Razor视图,然后单击它。但是如果我想建立这个链接不仅默认情况下调用像Skype这样的应用程序而且还重定向到其他操作呢?
我做到了:
<p>@Html.ActionLink("Call Cell Phone", "Call", new { id = Model.Id, number = Model.CellNumber }, new { @class = "btn btn-default" })</p>
它转到Call
操作,我们传递了我们呼叫的人的ID和该人的号码。
System.Diagnostics.Process
来调用呼叫:public string formatPhoneNumber(string number) {
Regex rgx = new Regex("[^0-9]");
return rgx.Replace(number, "");
}
public ActionResult Call(int id, string number) {
System.Diagnostics.Process proc = new System.Diagnostics.Process();
string formattedNumber = "tel:+48" + formatPhoneNumber(number);
System.Diagnostics.Debug.WriteLine("NUMBER " + formattedNumber);
proc.StartInfo.FileName = formattedNumber;
proc.Start();
Person person = db.Persons.Find(id);
return RedirectToAction("Edit", new Person { Id = id });
}
有效, Skype试图在我的电脑上打电话给某人。我的问题是它在调试模式下工作,但是当我将它发布到Windows Azure时,我认为proc.Start();
将在服务器而非客户端调用,这将停止工作。
那么如何从控制器点击客户端的tel:12312341
链接?
tel:...
链接。
注意:我将完全控制每个用户的设备,因为每个设备都是我的(员工使用),因此我可以在客户端安装任何程序。如果它有任何帮助。
答案 0 :(得分:1)
使用以下代码创建一个javascript文件
$(document).ready(function()
{
window.location.replace("tel:123-456-789");
}
你会想要两种观点。
1)您目前使用按钮说“呼叫单元”的视图 2)包含javascript文件的视图。
视图1中的按钮应该是控制器中操作的动作链接。
在操作中,您需要在调用手机之前添加要执行的代码。
在操作结束时,返回包含javascript文件的视图,并且应该调用该链接,以启动电话。
答案 1 :(得分:1)
浏览器故意限于沙箱环境,以限制网站对客户端系统的访问类型。如果任何网站可以选择性地调用客户端PC上的任何程序,那将是一个巨大的安全漏洞。
执行应用程序客户端的唯一方法是通过精心设计的ActiveX控件,该控件是针对要执行的特定应用程序而创建的。事实上,Skype安装了这种ActiveX控件,它拦截浏览器中的tel:
链接以在本地启动Skype客户端。
有可能编写一个能够在客户端机器上执行非常特定的程序的JavaScript函数,la new ActiveXObject("WScript.Shell");
,假设您确切地知道执行该进程的命令行,即可执行文件的位置在每台客户端计算机上都是相同的,客户端对未签名的ActiveX控件有松散的限制(主要安全问题),并且用户不选择使用非ActiveX兼容的浏览器。
总而言之,创建一个启动客户端应用程序的网站并不是一个简单的过程。