我正在尝试通过网页上的链接启动ClickOnce应用程序。在启动应用程序之前,该链接必须向服务器请求事务GUID。代码工作原理如下:
function clickHandler() {
$.post('/gettransactionid.aspx', function(tranId) {
console.log("BEFORE");
window.location = "/deploy/Company.Domain.Product.application?" + tranId;
console.log("AFTER");
});
return false;
}
在Firefox中,这个功能完美运行,但在IE中它执行了导航并且没有打开clickonce应用程序。BEFORE和AFTER的console.log在IE8开发工具的控制台窗口中显示。任何帮助将不胜感激,因为我已经花了4个小时尝试使用各种方法解决它!
我尝试过: - 将window.location更改为window.open。这只是启动一个窗口一秒钟后就无法启动应用程序。 - 使用alert而不是window.location。这什么也没做。 - 对抗IE7、IE8和IE9。 - 通过将其添加到队列并在根窗口上下文中处理window.location来规避浏览器安全性。 - 我已经检查了gettransactionid.aspx返回事务ID。 - 在Firefox中操作 - 它正常工作。
在Microsoft的文档中找到答案: 如果您开发了一个自定义Web页面,使用Active Scripting启动ClickOnce应用程序,您可能会发现该应用程序在某些计算机上无法启动。Internet Explorer包含一个称为文件下载的自动提示设置,它会影响此行为。此设置位于选项菜单的安全选项卡中,影响此行为。它被称为文件下载的自动提示,并且在下载类别下列出。默认情况下,该属性对于内部网页设置为启用,对于Internet网页设置为禁用。当此设置被设置为禁用时,任何试图以编程方式激活ClickOnce应用程序(例如,通过将其URL分配给document.location属性)都将被阻止。在这种情况下,用户只能通过用户启动的下载来启动应用程序,例如,通过单击设置为应用程序URL的超链接。
更新:2011年9月1日,由于“自动提示下载”被删除,这在IE9中完全失效了。