[英]window.location doesn't work after an AJAX request in Internet Explorer
我试图通过网页上的链接启动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应用程序。 在IE8开发工具的控制台窗口中显示控制台.log BEFORE和AFTER。 任何帮助将不胜感激,因为我花了4个小时试图解决它与各种黑客!
我试过了:
在Microsoft的文档中找到答案:
如果您已经开发了一个使用Active Scripting启动ClickOnce应用程序的自定义Web页面,您可能会发现该应用程序无法在某些计算机上启动。 Internet Explorer包含一个名为“自动提示文件下载”的设置,该设置会影响此行为。 此选项菜单中的“安全”选项卡上提供了此设置,该设置会影响此行为。 它被称为自动提示文件下载,它列在下载类别下面。 对于Intranet网页,该属性默认设置为“启用”,默认情况下,“Internet网页”设置为“禁用”。 当此设置设置为“禁用”时,将阻止以编程方式激活ClickOnce应用程序的任何尝试(例如,通过将其URL分配给document.location属性)。 在这种情况下,用户只能通过用户启动的下载启动应用程序,例如,通过单击设置为应用程序URL的超链接。
更新2011年9月1日:具有讽刺意味的是,由于“自动提示下载”被删除,现在已经完全破坏了IE9。
回答!
如果您已经开发了一个使用Active Scripting启动ClickOnce应用程序的自定义Web页面,您可能会发现该应用程序无法在某些计算机上启动。 Internet Explorer包含一个名为“自动提示文件下载”的设置,该设置会影响此行为。 此选项菜单中的“安全”选项卡上提供了此设置,该设置会影响此行为。 它被称为自动提示文件下载,它列在下载类别下面。 对于Intranet网页,该属性默认设置为“启用”,默认情况下,“Internet网页”设置为“禁用”。 当此设置设置为“禁用”时,将阻止以编程方式激活ClickOnce应用程序的任何尝试(例如,通过将其URL分配给document.location属性)。 在这种情况下,用户只能通过用户启动的下载启动应用程序,例如,通过单击设置为应用程序URL的超链接。
因此,请更改IE安全设置以打开自动提示文件下载。
我也有同样的问题。 一种可能的解决方案是将ajax请求从异步更改为同步。 如果您这样做,则根本不需要“自动提示”。
我同意Mih,因为您无法告诉您的用户更改其浏览器选项。 如果您使用异步请求,则可能在Internet Explorer中没问题。
您可以将$ .post更改为$ .ajax,如下所示:
$.ajax({
type: 'POST',
url: url,
...
async:false
});
有关ajax的更多信息: http : //api.jquery.com/jQuery.ajax/
尝试调用setTimeout
以稍后执行导航。
你应该为你的window.location添加一个完整的URL(包括http://
):-)
我刚才有同样的问题,这与我的FQDN中有一个下划线有关。 在FQDN中使用下划线是违法的,但只有Internet Explorer实际阻止它,而其他浏览器使其正常工作。 如果您有下划线,Internet Explorer也不会注册cookie ...
如果这不是你的问题,我建议在window.location之前尝试一个e.preventDefault()来看看会发生什么。
尝试删除第一个斜杠:
window.location = "deploy/Company.Domain.Product.application?" + tranId;
也许IE认为你正试图从根部“部署”。 无论如何,我认为使用完整网址是一种很好的做法=没有误解
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.