Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript window.location不';Internet Explorer中的AJAX请求后无法工作_Javascript_Jquery_Internet Explorer_Clickonce_Window - Fatal编程技术网

Javascript window.location不';Internet Explorer中的AJAX请求后无法工作

Javascript window.location不';Internet Explorer中的AJAX请求后无法工作,javascript,jquery,internet-explorer,clickonce,window,Javascript,Jquery,Internet Explorer,Clickonce,Window,我正在尝试通过网页上的链接启动ClickOnce应用程序。在启动应用程序之前,链接必须转到服务器以请求事务GUID。代码的工作原理如下: function clickHandler() { $.post('/gettransactionid.aspx', function(tranId) { console.log("BEFORE"); window.location = "/deploy/Company.Domain.Product.applicatio

我正在尝试通过网页上的链接启动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;
}
$.ajax({
  type: 'POST',
  url: url,
  ...
  async:false
});
这在Firefox中运行得非常好,但在IE中,它形成了一个导航,不会打开clickonce应用程序。之前和之后的console.log显示在IE8开发工具的控制台窗口中。任何帮助将不胜感激,因为我已经花了4个小时在这个问题上试图解决它与各种黑客

我试过:

  • 将window.location更改为window.open。这只会启动一个窗口一秒钟,但无法启动应用程序
  • 警报,而不是window.location。这没用
  • 针对IE7、IE8和IE9
  • 通过将其添加到队列并在根窗口上下文中处理window.location来规避浏览器安全性
  • 我已经检查了gettransactionid.aspx,它返回事务id
  • 在Firefox中实现——效果很好

在Microsoft的文档中找到了答案:

如果您开发了一个使用活动脚本启动ClickOnce应用程序的自定义网页,您可能会发现该应用程序在某些机器上无法启动。Internet Explorer包含一个名为“自动提示文件下载”的设置,该设置会影响此行为。此设置在影响此行为的“选项”菜单的“安全”选项卡上可用。它被称为文件下载自动提示,列在下载类别下面。默认情况下,该属性设置为对intranet网页启用,对Internet网页禁用。当此设置设置为禁用时,以编程方式激活ClickOnce应用程序(例如,通过将其URL分配给document.location属性)的任何尝试都将被阻止。在这种情况下,用户只能通过用户发起的下载来启动应用程序,例如,通过单击设置为应用程序URL的超链接


2011年9月1日更新:具有讽刺意味的是,由于“自动下载提示”被删除,IE9中的这一功能现在已经完全中断。

稍后尝试调用
setTimeout
执行导航。

您应该添加完整的URL(包括
http://
)对于你的window.location:-)

我不久前也遇到了同样的问题,这与我的FQDN中有下划线这一事实有关。在FQDN中使用下划线是非法的,但实际上只有Internet Explorer会阻止它,而其他浏览器会使其正常工作。如果您有下划线,Internet Explorer也不会注册Cookie


如果这不是您的问题,我建议您在window.location之前尝试使用e.preventDefault(),看看会发生什么。

尝试删除第一个斜杠:

window.location = "deploy/Company.Domain.Product.application?" + tranId;
也许IE认为您正试图从根本上“部署”。无论如何,我认为使用完整的url=没有误解是一个很好的做法

答案

如果您开发了一个使用活动脚本启动ClickOnce应用程序的自定义网页,您可能会发现该应用程序在某些机器上无法启动。Internet Explorer包含一个名为“自动提示文件下载”的设置,该设置会影响此行为。此设置在影响此行为的“选项”菜单的“安全”选项卡上可用。它被称为文件下载自动提示,列在下载类别下面。默认情况下,该属性设置为对intranet网页启用,对Internet网页禁用。当此设置设置为禁用时,以编程方式激活ClickOnce应用程序(例如,通过将其URL分配给document.location属性)的任何尝试都将被阻止。在这种情况下,用户只能通过用户发起的下载来启动应用程序,例如,通过单击设置为应用程序URL的超链接


因此,更改IE安全设置以打开文件下载的自动提示。

我也有同样的问题。一种可能的解决方案是将ajax请求从异步更改为同步。如果你这样做,那么就根本不需要自动提示。

我同意Mih的观点,因为你不能告诉你的用户改变他们的浏览器选项。 如果您使用异步请求,在internet explorer中也可以

您可以将$.post更改为$.ajax,如下所示:

function clickHandler() {
    $.post('/gettransactionid.aspx', function(tranId) {
        console.log("BEFORE");
        window.location = "/deploy/Company.Domain.Product.application?" + tranId;
        console.log("AFTER");
    });
    return false;
}
$.ajax({
  type: 'POST',
  url: url,
  ...
  async:false
});

有关ajax的更多信息,请点击此处:

您是否尝试过window.location.href?是的,很遗憾,我尝试过。同样的结果。什么也没发生,是的。我可以直接使用URL或window.location启动它,但不能在ajax完成后启动。由于新的下载管理器,IE9似乎破坏了这种行为,所以现在不可能这样做。乔伊:FQDN中没有任何内容。这是IIS7上的本地主机。preventDefault也不走运。看起来是这样,但它不会启动clickonce启动程序。同样在IE9中,虽然状态栏和地址栏会闪烁片刻,但没有根据分析器发出请求。我试过了-它在IE中不起作用。但在Firefox中仍然有效。这是IE9中的设置吗?我找不到它--“下载”类别只包含两个项目:文件下载和字体下载,并且当前都设置为“启用”。有趣的是,在我的例子中,IE请求了.application文件,但没有对它做任何处理。但是,如果我将window.location更改为指向文件下载,那么一开始就没有问题(这两种情况都发生在jquery document.ready的处理程序中)。我会看看我的IE9虚拟机。好的,我已经看过了。在IE9 RTM中没有这样做的要求。它按预期工作。由于缺少文件加载的自动提示,现在在IE9上已停止工作。我已经向微软提出了一个支持案例,让他们解决这个问题。