Chrome 83 中取消的 HTTP 请求
HTTP requests canceled in Chrome 83
我在 asp.net 解决方案中对某些页面使用 telerik。
在起始页上,我有一些具有相同设计的按钮(它们被重定向到 aspx 页面)例如
<telerik:RadButton runat="server" ID="Button" NavigateUrl="Dest/Example.aspx"
自最近 chrome 更新 (v 83) 以来,所有请求均失败(状态已取消)。
始作俑者好像
}else{if(!e||e=="_self"){window.location.href=h;
(telerik 资源)
有人有想法吗?感谢任何帮助。
所以我遇到了同样的问题,我认为这可能需要在浏览器级别解决,但在他们修复它之前,这里有一个对我有用的解决方法。我还测试了这不仅限于 telerik,asp 按钮也坏了。我们有很多具有此类代码的应用程序,将此代码添加到所有这些位置将是疯狂的。我想我们会看看 Chrome 是否会很快修复它。我还在 chrome 的关于页面上发送了 "report a problem" 并提到了这一点。
解决方案:
像这样将 OnClientClicking="OnClientClicking" 添加到您的按钮中:
<telerik:RadButton runat="server" ID="Button" NavigateUrl="Dest/Example.aspx" OnClientClicking="OnClientClicking" />
然后在 javascript 部分添加:(从 teleriks radbutton 演示代码中获取和修改)
<script>
OnClientClicking = function (sender, args) {
var $ = $telerik.$;
if (sender.get_navigateUrl() && sender.get_buttonType() == Telerik.Web.UI.RadButtonType.LinkButton) {
var url = sender.get_navigateUrl()
//radopen(url, url);
window.location.href = url;
args.set_cancel(true);
}
};
</script>
希望对您有所帮助!
您也可以使用 RadPushButton and/or RadLinkButton 代替 RadButton 来解决这个问题。它们是 RadButton 的现代版本。
更新:问题已在 R2 2020 SP1 中修复。
R3 2020 也将进行改进,将于 2020 年 9 月 16 日发布。
似乎 Google Chrome 版本 84 的更新修复了这个问题,旧版本再次正常工作。能否确认一下?
此外,如果您使用的是 R2 2020 SP1 版本并遇到问题,您可以尝试恢复回传功能的原始行为。
您也可以在反馈入口中订阅和分享您的场景:
恢复 pre-service 包版本:
将以下脚本放在页面的ScriptManager下。
Telerik.Web.UI.Button.PostbackFunctionality.prototype.clicked = function (ev) {
var that = this;
var baseResult = that.base.clicked(ev);
that._isInput = that._isEventTargetButton(ev);
//FIX: The AjaxManager does not update the affected update panels when the default button fires the click under IE browsers,
//so we need to set _activeDefaultButtonClicked to null, in order to for the Ajax to work
var requestManager = Sys.WebForms ? Sys.WebForms.PageRequestManager.getInstance() : null;
if (requestManager) requestManager._activeDefaultButtonClicked = true;
// old version code
var pbResult = that.options.autoPostBack ? that._postback() : false;
// new version code
//var pbResult = that.options.autoPostBack;
//var isNavigating =
// (that.options.buttonType == 1
// || that.options.buttonType == 4)
// && that.options.navigateUrl != "";
//if (pbResult && !isNavigating) {
// that._postback();
//}
//else {
// pbResult = false;
//}
if (requestManager) requestManager._activeDefaultButtonClicked = false;
delete that._isInput;
return (baseResult && pbResult);
}
我在 asp.net 解决方案中对某些页面使用 telerik。 在起始页上,我有一些具有相同设计的按钮(它们被重定向到 aspx 页面)例如
<telerik:RadButton runat="server" ID="Button" NavigateUrl="Dest/Example.aspx"
自最近 chrome 更新 (v 83) 以来,所有请求均失败(状态已取消)。
始作俑者好像
}else{if(!e||e=="_self"){window.location.href=h;
(telerik 资源)
有人有想法吗?感谢任何帮助。
所以我遇到了同样的问题,我认为这可能需要在浏览器级别解决,但在他们修复它之前,这里有一个对我有用的解决方法。我还测试了这不仅限于 telerik,asp 按钮也坏了。我们有很多具有此类代码的应用程序,将此代码添加到所有这些位置将是疯狂的。我想我们会看看 Chrome 是否会很快修复它。我还在 chrome 的关于页面上发送了 "report a problem" 并提到了这一点。
解决方案:
像这样将 OnClientClicking="OnClientClicking" 添加到您的按钮中:
<telerik:RadButton runat="server" ID="Button" NavigateUrl="Dest/Example.aspx" OnClientClicking="OnClientClicking" />
然后在 javascript 部分添加:(从 teleriks radbutton 演示代码中获取和修改)
<script>
OnClientClicking = function (sender, args) {
var $ = $telerik.$;
if (sender.get_navigateUrl() && sender.get_buttonType() == Telerik.Web.UI.RadButtonType.LinkButton) {
var url = sender.get_navigateUrl()
//radopen(url, url);
window.location.href = url;
args.set_cancel(true);
}
};
</script>
希望对您有所帮助!
您也可以使用 RadPushButton and/or RadLinkButton 代替 RadButton 来解决这个问题。它们是 RadButton 的现代版本。
更新:问题已在 R2 2020 SP1 中修复。 R3 2020 也将进行改进,将于 2020 年 9 月 16 日发布。
似乎 Google Chrome 版本 84 的更新修复了这个问题,旧版本再次正常工作。能否确认一下?
此外,如果您使用的是 R2 2020 SP1 版本并遇到问题,您可以尝试恢复回传功能的原始行为。
您也可以在反馈入口中订阅和分享您的场景:
恢复 pre-service 包版本:
将以下脚本放在页面的ScriptManager下。
Telerik.Web.UI.Button.PostbackFunctionality.prototype.clicked = function (ev) {
var that = this;
var baseResult = that.base.clicked(ev);
that._isInput = that._isEventTargetButton(ev);
//FIX: The AjaxManager does not update the affected update panels when the default button fires the click under IE browsers,
//so we need to set _activeDefaultButtonClicked to null, in order to for the Ajax to work
var requestManager = Sys.WebForms ? Sys.WebForms.PageRequestManager.getInstance() : null;
if (requestManager) requestManager._activeDefaultButtonClicked = true;
// old version code
var pbResult = that.options.autoPostBack ? that._postback() : false;
// new version code
//var pbResult = that.options.autoPostBack;
//var isNavigating =
// (that.options.buttonType == 1
// || that.options.buttonType == 4)
// && that.options.navigateUrl != "";
//if (pbResult && !isNavigating) {
// that._postback();
//}
//else {
// pbResult = false;
//}
if (requestManager) requestManager._activeDefaultButtonClicked = false;
delete that._isInput;
return (baseResult && pbResult);
}